我的Rails日志遇到了非常奇怪的行为。其中记录器级别自动/突然变为ERROR(:错误。记录器级别代码3)而不是它应该是什么(:debug或:info)。
此图像中的日志级别与预期一致。 调试或级别0
但在几分钟内(最多2分钟),记录器级别变为3( 3代表ERROR )
我遇到github issue,说明Rails记录器不是线程安全的,我在 线程 模式下使用乘客而不是进程< / em>以前的。这可能是这种行为的原因吗?
将记录器级别从0更改为3的其他可能性是什么?
答案 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
现在,如果两个或多个线程并行进入该方法,则有可能只有第一个调用看到实际日志级别,第二个调用看到临时级别,因为第一个调用覆盖了实际日志级别但未重置然而。现在,当此调用结束时,日志级别未正确重置(它被重置为错误的临时值),因此日志记录保持禁用状态。
-
我还没能解决这个问题,但很快就会解决。