将事务 ID 添加到 ruby​​-on-rails 日志

将事务 ID 添加到 ruby​​-on-rails 日志

我们有一个 RoR 应用程序(目前为 rails 版本 3.2.15)。随着它变得越来越忙,它生成的日志文件对于故障排除的用处越来越小。当它们像这样出现时,这不是问题:

于 2013-11-12 13:45:00 +0000 开始对 172.16.202.30 执行 GET “/accounts/28088166/kittens/22894/rendered_png?file_id=5d3eaec77954a489b5ddd75143091767&kitten_store_id=9970569bbacf7b6dbeb4eb9295960d69&size=large”
由 KittenController#rendered_png 处理为 HTML
  参数:{“file_id”=>“5d3eaec77954a489b5ddd75143091767”,“kitten_store_id”=>“9970569bbacf7b6dbeb4eb9295960d69”,“size”=>“large”,“kitten_cam_id”=>“280941”,“id”=>“kjlak357aw479607t”}
  渲染文本模板(0.0ms)
发送数据(1.8ms)
1037.4 毫秒内完成 200 OK(查看次数:1.4 毫秒 | ActiveRecord:98.4 毫秒)

请求简短,组装快速,所有相关日志行都在一个块中。

但是,并非所有代码都能在 1037 毫秒内渲染完成。有几个调用可能会超过几秒,在此期间,一些更快的调用可能会进入(我们正在运行多个 Passenger 实例)。当发生这种情况时,很难确定哪些日志行属于哪个GET。获得如下日志行并不罕见:

Sent data   (4.1ms)
Completed 200 OK in 947.1ms (Views: 230.9ms | ActiveRecord: 56.8ms)
Completed 200 OK in 767.4ms (Views: 3.2ms | ActiveRecord: 72.2ms)
Completed 200 OK in 2338.0ms (Views: 0.2ms | ActiveRecord: 0.0ms)

哎呀...哪个 GET 转到哪行“处理依据”?

是否可以在这些日志行中添加类似交易 ID 的内容?日志垃圾邮件会散布开来,但至少 grep-magic 会给我所需的统一条目。

答案1

您可以尝试使用ActiveSupport::TaggedLogging- 这是方法Rails 指南中推荐- 但缺点是您必须自己提供唯一的 ID。

logragegem 提供了更紧凑的单行日志,可能更接近您所追求的。

相关内容