У нас есть приложение RoR (сейчас rails версии 3.2.15). По мере того, как он становится все более загруженным, создаваемые им файлы журнала становятся все менее и менее полезными для устранения неполадок. Когда они вот так входят, это не проблема:
Started GET "/accounts/28088166/kittens/22894/rendered_png?file_id=5d3eaec77954a489b5ddd75143091767&kitten_store_id=9970569bbacf7b6dbeb4eb9295960d69&size=large" for 172.16.202.30 at 2013-11-12 13:45:00 +0000 Processing by KittenController#rendered_png as HTML Parameters: {"file_id"=>"5d3eaec77954a489b5ddd75143091767", "kitten_store_id"=>"9970569bbacf7b6dbeb4eb9295960d69", "size"=>"large", "kitten_cam_id"=>"280941", "id"=>"kjlak357aw479607t"} Rendered text template (0.0ms) Sent data (1.8ms) Completed 200 OK in 1037.4ms (Views: 1.4ms | ActiveRecord: 98.4ms)
Короткий запрос, быстро собирается, все актуальные логи в одном блоке.
Однако не весь наш код обрабатывается за 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 идет в какие строки "Обработка"?
Можно ли добавить в эти строки журнала что-то вроде идентификатора транзакции? Журнал-спам будет перемежаться, но, по крайней мере, grep-magic даст мне унифицированные записи, которые мне нужны.
Вы можете попробовать использовать ActiveSupport::TaggedLogging
- это метод рекомендуется в собственных руководствах Rails - но обратная сторона заключается в том, что вам придется предоставить уникальный идентификатор самостоятельно.
В lograge
gem предоставляет гораздо более компактный однострочный журнал и может быть ближе к тому, что вам нужно.