【问题标题】:Rails logger level changes to ERROR abruptlyRails 记录器级别突然更改为 ERROR
【发布时间】:2016-06-30 20:27:58
【问题描述】:

我的 Rails 日志出现非常奇怪的行为。其中记录器级别自动/突然更改为 ERROR(:error.logger level code 3) 而不是它应该是的(:debug 或 :info)。

在此图像中,日志级别符合预期。 调试或 0 级

但在几分钟内(最多 2 分钟),记录器级别更改为 3(3 代表 ERROR

我遇到了 github issue,它解释说 Rails 记录器不是线程安全的,我在 thread 模式下使用乘客,而不是 process 以前是这样的。这可能是这种行为的原因吗?

还有哪些其他可能性,将记录器级别从 0 更改为 3?

【问题讨论】:

  • 这与线程安全无关。您的问题只有一个答案:您的应用程序或您的应用程序所依赖的 gem 会更改日志级别。

标签: ruby-on-rails ruby ruby-on-rails-3 logging thread-safety


【解决方案1】:

这是问题:https://github.com/rails/rails/issues/22425 active_record session-store 每次获取、设置或销毁会话时都会进行日志静默。

由于乘客线程模式,LoggerSilence 中存在竞争条件

--

https://github.com/rails/rails/blob/3-2-stable/activesupport/lib/active_support/benchmarkable.rb#L48

现在,如果两个或多个线程并行进入该方法,则有可能只有第一个调用会看到真正的日志级别,而第二个调用会看到临时级别,因为真正的日志级别被第一次调用覆盖但没有重置然而。现在,当此调用结束时,日志级别未正确重置(重置为错误的临时值),因此日志记录保持禁用状态。

--

我还不能解决这个问题,但很快就会解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2019-06-06
    • 2014-09-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多