每个环境有多个 config.logger

All*_*hun 5 ruby-on-rails papertrail-app

我正在使用 Rails 5,我正在使用我的环境/production.rb 上的这个片段将应用程序日志发送到papertrail

config.logger = ActiveSupport::TaggedLogging.new(
  RemoteSyslogLogger.new(
    'logs6.papertrailapp.com', 41364,
    program: "rails-#{Rails.env}"
  )
)
Run Code Online (Sandbox Code Playgroud)

有时将日志发送到 papertrail 会出现延迟,所以我tail -f production.log手动执行,但由于日志已发送到 papertrail,因此它没有显示任何内容。

要查看日志尾我需要更换config.logger

config.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(File.join(Rails.root, "log", "#{Rails.env}.log")))
Run Code Online (Sandbox Code Playgroud)

在 Rails 中有没有办法可以在同一环境中使用多个记录器?基本上我想将日志发送到 papertrail 或使用尾部日志手动查看日志?

ely*_*ado 3

您可以使用自定义记录器扩展 Rails.logger:

syslog_logger = ActiveSupport::TaggedLogging.new(
  RemoteSyslogLogger.new(
    'logs6.papertrailapp.com', 41364,
    program: "rails-#{Rails.env}"
  )
)
Rails.logger.extend(ActiveSupport::Logger.broadcast(syslog_loger))
Run Code Online (Sandbox Code Playgroud)

您可以在初始化程序文件中执行此操作,也可以直接在环境配置文件中执行此操作,但您更愿意这样做。