问题描述
我想创建一个对象,该对象可以配置为一组任意的输出流(例如 STDOUT
、一个打开的文件、一个 StringIO
),这样我就可以一次写入该对象,并让它将输出写入所有配置的输出流。
这种东西存在吗?写起来可能不难,但如果已经有了就更好了。
有点像……
log_file = File.open('my.log','w')
strio = StringIO.new
outputter = CompositeOutputStream.new(log_file,strio,STDOUT)
outputter << "I can be found in all 3 output streams."
...
log_file.close
# do something with strio.string
解决方法
我不知道直接处理流的库,但对于日志记录,有 https://github.com/rocketjob/semantic_logger 可以多路复用、批处理、异步等。