【问题标题】:Multiple config.logger per environment每个环境有多个 config.logger
【发布时间】:2018-10-07 20:52:30
【问题描述】:

我正在使用 Rails 5,并在我的 environments/production.rb

上使用此 sn-p 将应用程序日志发送到 papertrail
config.logger = ActiveSupport::TaggedLogging.new(
  RemoteSyslogLogger.new(
    'logs6.papertrailapp.com', 41364,
    program: "rails-#{Rails.env}"
  )
)

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

要查看有尾日志,我需要将 config.logger 替换为

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

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

【问题讨论】:

    标签: ruby-on-rails papertrail-app


    【解决方案1】:

    您可以使用自定义记录器扩展 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))
    

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

    【讨论】:

    • @elyavarado。我尝试使用它,但是当我使用 Rails.logger.extend 扩展 syslog_logger 时,它不会将日志发送到 papertrail,但是当我将它分配给 production.rb 的 config.logger 时,它会将日志发送到 papertrail。
    【解决方案2】:

    有点老问题,但我只是满足同样的需求,这里我是如何解决的:

    1. 创建了一个 LoggerProxy 类来将调用转发到多个记录器:
    class LoggerProxy
      def initialize
        @loggers = Set.new
      end
    
      def add(logger)
        @loggers.add(logger)
      end
    
      def remove(logger)
        @loggers.delete(logger)
      end
    
      def method_missing(name, *args, &block)
        @loggers.each do |logger|
          logger.public_send(name, *args, &block)
        end
      end
    end
    
    1. 在我的配置文件中,在 LoggerProxy 中添加了我的两个记录器:
    config.logger = LoggerProxy.new
    config.logger.add(Logger.new(Rails.root.join('log', "#{Rails.env}.log"), 10, 50.megabytes))
    config.logger.add(ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2020-05-28
      • 2015-03-04
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多