Rails记录器级别突然变为ERROR

时间:2016-03-15 11:53:49

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

我的Rails日志遇到了非常奇怪的行为。其中记录器级别自动/突然变为ERROR(:错误。记录器级别代码3)而不是它应该是什么(:debug或:info)。

此图像中的日志级别与预期一致。 调试或级别0

good logs showing all info. level 0 means debug

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

enter image description here

我遇到github issue,说明Rails记录器不是线程安全的,我在 线程 模式下使用乘客而不是进程< / em>以前的。这可能是这种行为的原因吗?

将记录器级别从0更改为3的其他可能性是什么?

1 个答案:

答案 0 :(得分:0)

这就是问题:https://github.com/rails/rails/issues/22425 active_record会话存储在每次获取,设置或销毁会话时执行日志静默。

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

-

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

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

-

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