rack-timeout:关闭信息/活动日志记录

时间:2015-10-09 05:49:28

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

安装了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

4 个答案:

答案 0 :(得分:2)

(请注意,在v0.3.0中,班级名称已从Stage…更改为State…

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

请阅读此处了解更多信息

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 :(得分:0)

config/initializers/rack_timeout.rb中,我添加了:

Rack::Timeout::Logger.disable

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

相关问题