Ruby 标准库或 gem 中是否有复合输出流?

问题描述

我想创建一个对象,该对象可以配置为一组任意的输出流(例如 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 可以多路复用、批处理、异步等。