0

ログのサイズが原因で 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})

あなたはアイデアを得ました。

それで、これを処理するための良いリソースがオンラインにありますか? たくさんのアドバイスありがとうございます...

4

2 に答える 2

1

私は、上記のサイレンサー gem の作成者です。一般的なロギングまたは特定のアクションのロギングをフィルタリングすることを検討していますか?サイレンサー ジェムは後者の問題を処理します。確かにさまざまな方法で使用できますが、主に特定のアクションを対象としています。 .

あまり詳細でないログを探しているように思えます。logrageをご覧になることをお勧めします。ほとんどの Rails アプリの本番環境で使用しており、非常に便利であることがわかりました。

より専門的なものが必要な場合は、本質的に lograge ソリューションである独自のLogSubscriberの実装を検討することをお勧めします。

于 2013-01-28T21:54:04.717 に答える
0

Heroku環境でログレベルを設定します

現在のログレベルを表示します。

heroku config

あなたはおそらく「情報」を持っているでしょう、それはただたくさんのノイズです

警告またはエラーに変更します

heroku config:add LOG_LEVEL=WARN

また、ログを表示するときは、「アプリ」サーバーのみを指定してください

heroku logs --source app

私は個人的に、ログをライブで表示するために--tailを追加します。

heroku logs --source app --tail
于 2013-01-28T20:11:20.737 に答える