Ruby on rails 4 机架超时:关闭信息/活动日志记录
安装了gem之后,如何能够只显示与错误相关的日志?例如,我希望避免日志中出现以下内容:Ruby on rails 4 机架超时:关闭信息/活动日志记录,ruby-on-rails-4,heroku,rack,Ruby On Rails 4,Heroku,Rack,安装了gem之后,如何能够只显示与错误相关的日志?例如,我希望避免日志中出现以下内容: source=机架超时id=8A11A8AC3DADB59A4 F347D8E365FADDF超时=20000ms服务=0ms状态=active source=机架超时id=8a11a8ac3dadb59a4f347d8e365faddf超时=20000ms服务=49ms状态=已完成 source=机架超时id=ee947d4a291d02821ab108c4c127f555超时=20000ms状态=就绪
source=机架超时id=8A11A8AC3DADB59A4 F347D8E365FADDF超时=20000ms服务=0ms状态=active
source=机架超时id=8a11a8ac3dadb59a4f347d8e365faddf超时=20000ms服务=49ms状态=已完成
source=机架超时id=ee947d4a291d02821ab108c4c127f555超时=20000ms状态=就绪
以下情况不起作用:
Rack::超时。取消注册\u state\u change\u observer(:active)
以下内容可能是正确的,但我在测试时遇到了问题:
Rack::Timeout::Logger.level=Logger::ERROR
有关详细信息,请阅读此处
或
您也可以尝试此代码,尽管未经测试
Rack::Timeout::StageChangeLoggingObserver.logger = logger = ::Logger.new(STDERR)
logger.level = ::Logger::DEBUG
logger.formatter = ->(severity, timestamp, progname, msg) {"[#{timestamp}] #{msg} at=#{severity.downcase}\n" }
(注意,在v0.3.0中,类名从Stage…
更改为State…
)
在生产环境中,我希望在INFO
级别进行日志记录,这样每个请求都会收到一条日志消息,但我不希望机架超时产生这种噪音
您可以在statechangelogingobserver
中更改STATE\u LOG\u级别
散列,并更改用于不同状态的日志级别。我在初始化器中使用它来防止ready
和completed
日志显示:
Rack::Timeout::StateChangeLoggingObserver::STATE_LOG_LEVEL[:ready] = :debug
Rack::Timeout::StateChangeLoggingObserver::STATE_LOG_LEVEL[:completed] = :debug
我对这个问题的解决方案是为
机架超时提供自己的记录器
完成此操作后,可以更改其日志级别:
# config/initializers/timeout.rb
Rack::Timeout::Logger.logger = Logger.new("log/timeout.log")
Rack::Timeout::Logger.logger.level = Logger::ERROR
在config/initializers/rack_timeout.rb
I中添加:
Rack::Timeout::Logger.disable
这里描述了更详细的选项:如果您要将应用程序部署到Heroku,则无法写入log/
,因此请使用Rack::Timeout::Logger.Logger=Logger.new(STDOUT)
(或者stderr,如果您愿意)。这就是我所做的Rack::Timeout::Logger.disable If Rails.env.development?