已有的项目日志输出在 STDOUT,方便一些日志工具汇总日志,现在想增加其他的日志分享工具却又需要从文件中读取日志,如何在保持日志输出到STDOUT的同时增加输出到文件中呢?
https://guides.rubyonrails.org/initialization.html#rails-server-start
def log_to_stdout
wrapped_app # touch the app so the logger is set up
console = ActiveSupport::Logger.new(STDOUT)
console.formatter = Rails.logger.formatter
console.level = Rails.logger.level
unless ActiveSupport::Logger.logger_outputs_to?(Rails.logger, STDOUT)
Rails.logger.extend(ActiveSupport::Logger.broadcast(console))
end
end我们在 Rails 的初始化过程中,可以看到 log_to_stdout 方法中, 有将日志扩展到新创建的 STDOUT,因此我们可以仿照这个方法,先创建一个 File 日志, 然后将日志扩展到该文件中,即可实现将 Rails Logger 输出到多个目的地。
file_logger = ActiveSupport::Logger.new("log/#{Rails.env}.log")
Rails.logger.extend(ActiveSupport::Logger.broadcast(file_logger))