【问题标题】:Making Rails.logger tee writes to stdout使 Rails.logger tee 写入标准输出
【发布时间】:2013-02-19 09:04:46
【问题描述】:

我的 Rails.logger 运行良好,非常感谢,但我希望它写入 STDOUT(也就是说,不是放弃记录到日志文件,而是“Tee”它到标准输出)。

这在 Rails 3 中可行吗?

【问题讨论】:

  • tail -f $YOUR_LOG_FILE 有什么问题?

标签: ruby-on-rails ruby logging


【解决方案1】:

这个简单的委托记录器应该(*)解决问题:

class MultiLogger
  def initialize *loggers
    @loggers = loggers
  end

  def method_missing *args, &blk
    @loggers.each {|l| l.send *args, &blk }
  end

  def respond_to_missing? *args
    @loggers.all? {|l| l.respond_to? *args }
  end
end

Rails.logger = MultiLogger.new Rails.logger, Logger.new($stdout)

(*) 我没试过

【讨论】:

  • 对不起,这不起作用:写入控制台的内容多于写入日志文件的内容 - 在我的情况下,只有 sql 语句被记录,而控制台还包含普通“puts”和漂亮打印机的结果(PP .pp)。虽然我不确定这是不是这里的代码的错,因为遗留代码在日志记录方面非常混乱。
  • 好吧,显然您的日志记录并没有全部通过记录器。你还没有解释为什么你需要这个功能。你不能只使用外部工具,例如:tail -f
  • 您可能可以使用ObjectSpace#each_object 欺骗非记录器日志记录,以查找对您的日志文件打开的所有File 对象并将它们重新打开到管道|tee logfile。跨度>
  • 好吧,一些遗留的 + ad hoc 诊断会转到 STDOUT 而不是 Rails.logger。这导致我同步读取控制台和日志,这是一种乏味且令人沮丧的体验。将所有内容放入一个流中,无论是日志文件还是控制台都可以,但从技术上讲,它是相同的(仍然是一个流),并且控制台更方便,尤其是。因为我使用的是突出显示源代码行的 RubyMine。
猜你喜欢
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多