ログのサイズが原因で Papertrail アドオンが狂ってしまった Heroku Cedar スタックで Rails アプリ (v 3.1.10) を実行しています。
私のアプリは非常に冗長で、ログは巨大になっています (本当に巨大です):
1 つのフィールドで大量のデータをシリアル化すると、巨大な 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 データをコントローラーに送信します...
(悪名高い) 有名な「Assets パイプラインのログ記録の問題」については言及しませんでした。これを処理するために 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 の monkeypatches (ソリューション #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})
あなたはアイデアを得ました。
それで、これを処理するための良いリソースがオンラインにありますか? たくさんのアドバイスありがとうございます...