0

我正在 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})

你明白了。

那么,网上有什么好的资源来处理这个问题吗?非常感谢您的建议...

4

2 回答 2

1

我是上面提到的消音器 gem 的作者。您是要过滤一般的日志记录还是针对特定操作?消音器 gem 处理后一个问题。虽然您当然可以以不同的方式使用它,但它主要用于特定操作.

听起来您正在寻找不那么冗长的日志记录。我建议你看看lograge。我在我的大多数 Rails 应用程序中使用它,并且发现它非常有用。

如果您需要更专业的东西,您可能需要考虑实现自己的LogSubscriber,它本质上是 lograge 解决方案。

于 2013-01-28T21:54:04.717 回答
0

在 Heroku 环境中设置日志级别

查看您当前的日志级别:

heroku config

您很可能有“信息”,这只是很多噪音

将其更改为警告或错误

heroku config:add LOG_LEVEL=WARN

另外,查看日志时,只指定“app”服务器

heroku logs --source app

我个人,附加 --tail 以查看实时日志。

heroku logs --source app --tail
于 2013-01-28T20:11:20.737 回答