我们有一个 RoR 应用程序(现在是 Rails 版本 3.2.15)。随着它变得越来越忙,它生成的日志文件对故障排除的用处越来越小。当他们像这样进来时,这不是问题:
开始 GET "/accounts/28088166/kittens/22894/rendered_png?file_id=5d3eaec77954a489b5ddd75143091767&kitten_store_id=9970569bbacf7b6dbeb4eb9295960d69&size=large" for 172.16.201000 2013:45:-12 由 KittenController#rendered_png 处理为 HTML 参数:{"file_id"=>"5d3eaec77954a489b5ddd75143091767", "kitten_store_id"=>"9970569bbacf7b6dbeb4eb9295960d69", "size"=>"large", "kitten_cam_id"=>"280941", "id"=>"kjlak357awt479} 渲染文本模板(0.0ms) 发送数据(1.8ms) 在 1037.4ms 内完成 200 OK(查看:1.4ms | ActiveRecord:98.4ms)
简短的请求,快速组装,所有相关的日志行都在一个块中。
但是,并非我们所有的代码都在 1037 毫秒内呈现。有几个调用可能超过几秒钟,在此期间,其中几个更快的调用可能会进入(我们正在运行多个乘客实例)。发生这种情况时,很难确定哪些日志行属于哪个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)
Ooookaaaaay ... 哪个 GET 转到“处理依据”行?
是否可以在这些日志行中添加诸如事务 ID 之类的内容?日志垃圾邮件会散布,但至少 grep-magic 会给我我需要的统一条目。
您可以尝试使用
ActiveSupport::TaggedLogging
- 这是Rails 自己的指南中推荐的方法- 但缺点是您必须自己提供唯一 ID。gem 提供了更紧凑的
lograge
单行日志,并且可能更接近您所追求的。