【问题标题】:rack-timeout: turn off info/active logging机架超时:关闭信息/活动日志记录
【发布时间】:2016-01-06 23:03:11
【问题描述】:

安装了rack-timeout gem 后,如何仅显示 ERROR 相关的日志?例如,我想避免在我的日志中出现以下内容:

source=rack-timeout id=8a11a8ac3dadb59a4f347d8e365faddf timeout=20000ms service=0ms state=active source=rack-timeout id=8a11a8ac3dadb59a4f347d8e365faddf timeout=20000ms service=49ms state=completed source=rack-timeout id=ee947d4a291d02821ab108c4c127f555 timeout=20000ms state=ready

以下操作无效: Rack::Timeout.unregister_state_change_observer(:active)

以下可能是正确的路径,但我无法测试:

Rack::Timeout::Logger.level = Logger::ERROR

【问题讨论】:

    标签: ruby-on-rails-4 heroku rack


    【解决方案1】:

    config/initializers/rack_timeout.rb我加了:

    Rack::Timeout::Logger.disable if Rails.env.development?
    

    此处描述了更详细的选项:https://github.com/sharpstone/rack-timeout/blob/master/doc/logging.md

    (感谢@Sandip Subedi 的建议)

    【讨论】:

    • 这就是我所做的Rack::Timeout::Logger.disable if Rails.env.development?
    【解决方案2】:

    阅读此处了解更多信息

    https://github.com/heroku/rack-timeout#rails-apps-manually 要么 https://github.com/heroku/rack-timeout/blob/master/doc/settings.md

    您也可以尝试此代码,尽管未经测试。

    Rack::Timeout::StageChangeLoggingObserver.logger = logger = ::Logger.new(STDERR)
    logger.level = ::Logger::DEBUG
    logger.formatter = ->(severity, timestamp, progname, msg) {"[#{timestamp}] #{msg} at=#{severity.downcase}\n" }
    

    【讨论】:

      【解决方案3】:

      我对这个问题的解决方案是给rack-timeout 自己的记录器。

      完成此操作后,您可以更改其日志级别:

      # config/initializers/timeout.rb
      Rack::Timeout::Logger.logger = Logger.new("log/timeout.log")
      Rack::Timeout::Logger.logger.level = Logger::ERROR
      

      【讨论】:

      • 如果您将应用部署到 Heroku,则无法写入 log/,因此请改用 Rack::Timeout::Logger.logger = Logger.new(STDOUT)(或 stderr,如果您愿意)。
      【解决方案4】:

      (注意类名在 v0.3.0 中从 Stage… 更改为 State…

      在生产中,我想以INFO 级别登录,因此我会收到每个请求的日志消息,但我不希望机架超时产生这种噪音。

      您可以更改StateChangeLoggingObserver 中的STATE_LOG_LEVEL 哈希并更改用于不同状态的日志级别。我在初始化程序中使用它来防止显示 readycompleted 日志:

      Rack::Timeout::StateChangeLoggingObserver::STATE_LOG_LEVEL[:ready] = :debug
      Rack::Timeout::StateChangeLoggingObserver::STATE_LOG_LEVEL[:completed] = :debug
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-03
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-28
        相关资源
        最近更新 更多