我正在 Heroku Cedar 堆栈上运行 Rails 应用程序(v 3.1.10),由于日志的大小,Papertrail 附加组件变得疯狂。
我的应用程序非常冗长,日志变得越来越大(非常大):
有时是因为我在一个字段中序列化了大量数据,这会产生巨大的 SQL 请求。在我的模型中,我有很多:
serialize :a_game_data, Hash
serialize :another_game_data, Hash
serialize :a_big_set_of_game_data, Hash
[...]
感谢我的 AS3 Flash 应用程序与大量的 json 一起工作......
有时因为要渲染很多部分:
Rendered shared/_flash_message.html.erb (0.1ms)
Rendered shared/_header_cart_info.html.erb (2.7ms)
Rendered layouts/_header.html.erb (19.4ms)
[...]
这不是大问题,但我也添加了这个案例,因为 Jamiew 处理它,见下文......
有时因为同一页面上有很多 sql 查询:
User Load (2.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Course Load (5.3ms) SELECT "courses".* FROM "courses" WHERE (id = '1' OR pass_token = NULL)
Session Load (1.3ms) SELECT "sessions".* FROM "sessions" WHERE "sessions"."id" = 1 LIMIT 1
Training Load (1.3ms) SELECT "trainings".* FROM "trainings" WHERE "trainings"."id" = 1 LIMIT 1
[...]
这是一个大(太)复杂的应用程序,我们在这里......是的......
有时因为有很多参数:
Parameters: {"_myapp_session"=>"BkkiJTBhYWI1MUVlaVdtbE9Eb1Y2I5BjsAVEkiEF9jc3JmX3Rva2VlYVWZyM2I0dEZaR1YwNXFjZhZTQ1uBjsARkkiUkiD3Nlc3Npb25faWQGOgZFRhcmRlbi51c2yN1poVm8vdWo3YTlrdUZzVTA9BjsARkkiH3dAh7CMTQ0Yzc4ZDJmYzg5ZjZjOGQ5NVyLmFkbWluX3VzZXIua2V5BjsAVFsISSIOQWRtaW5Vc2VyBjsARlsGaQZJIiIkMmEkMTAkcmgvQ2Rwc0lrYzFEbGJFRG9jMnZvdQY7AFRJIhl3YXJkZW4udXNlci51c2VyLmtleQY7AFRbCEkiCVVzZXIGOwBGWwZpBkkiIiQyYSQxMCRBUFBST2w0aWYxQmhHUVd0b0V5TjFPBjsAVA==--e4b53a73f6b622cfe7550b2ee12678712e2973c7", "authenticity_token"=>"EeiWmlODoYXUfr3b4tFZGV05qr7ZhVo/uj7a9kuFsU0=", "utf8"=>"✓", "locale"=>"fr", "id"=>"1", "a"=>1, "a"=>1, "a"=>1, "a"=>1, "a"=>1, "a"=>1, [...] Hey! You've reach the end of the line but it's not the end of the parameters...}
AS3 Flash 应用程序将大 json 数据发送到控制器...
我没有提到(臭名昭著的)“资产管道日志记录问题”,因为现在我正在使用 quiet_assets gem 来处理这个问题:
https ://github.com/evrone/quiet_assets
那么......我尝试了什么?
1:Dennis Reimann 的中间件解决方案:
http://dennisreimann.de/blog/silencing-the-rails-log-on-a-per-action-basis/
2:Spagalocco 的宝石(灵感来自解决方案 #1):
https ://github.com/spagalloco/silencer
3:jamiew 的猴子补丁(灵感来自解决方案 #1 + 奖金):
https ://gist.github.com/1558325
没有什么能真正按预期工作,但它正在接近。
我宁愿在我的 ApplicationController 中使用这样的方法:
def custom_logging(opts={}, show_logs=true)
disable_logging unless show_logs
remove_sql_requests_from_logs if opts[:remove_sql_requests]
remove_rendered_from_logs if opts[:remove_rendered]
remove_params_from_logs if opts[:remove_params]
[...]
end
...并在任何控制器方法中调用它:custom_logging({:remove_sql_requests=>1, :remove_rendered=>1})
你明白了。
那么,网上有什么好的资源来处理这个问题吗?非常感谢您的建议...