アプリケーションがプロダクション環境に移行したら、どのような情報をファイルに記録するのかと思います。例外とエラーのロギング以外に...プロダクション環境でのログ/トレース対象
各メソッドの開始と終了はログに記録する必要がありますか?実行中のサービスの開始と終了?アプリケーションがデータをデータベースに保存するか、外部サービスを呼び出すたびに私はすべてのロギング/トレースとロギングエラーとのバランスを見つけようとしています。
アプリケーションがプロダクション環境に移行したら、どのような情報をファイルに記録するのかと思います。例外とエラーのロギング以外に...プロダクション環境でのログ/トレース対象
各メソッドの開始と終了はログに記録する必要がありますか?実行中のサービスの開始と終了?アプリケーションがデータをデータベースに保存するか、外部サービスを呼び出すたびに私はすべてのロギング/トレースとロギングエラーとのバランスを見つけようとしています。
は、何のハード&な規則はありません。
バック我々は、このJavaアプリケーションで作業し、ロギング用にlog4jを使用し、log4jの中で私たちはどちらかのデバッグ、警告、エラーとしてコードで私たちのログを定義することができましたし、数ヶ月、情報など
当社のデバッグログほぼすべての機能の開始にありました&終了、成功したすべての成功しなかったトランザクションは "info"として記録されましたが、例外の "error"は&と同様に記録されました。
アプリケーションを本番環境に1か月後に移動すると、アプリケーションを再起動せずに.propertiesファイルを使用してすべてのデバッグログをオフにしました。&私たちはうまく行きました。
これは誤植ですか?オフ? – solotim
私はさまざまなレベルを使いたいです。最も詳細な情報は、サービスの開始と終了、およびエラーと例外を示す です。最も詳細な数値は、すべてのローカル変数、関数の入力/終了などの値を示す にまで及ぶ可能性があります。
詳細は簡単に入手できますが、掘り出しが少なく、問題がある場所に飛行機で飛び越さなければならない可能性は低くなります。 。 。 。
Kそれは本当にあなたに依存
実稼働環境では、デフォルトで(log4netを使用して)ログに「INFO」が設定されています。このレベルでは、エラーを診断するための十分な情報がログに記録されます。それでは「十分な」情報とは何ですか?まあ、それはあなたのシステムに依存します。私たちのシステムでは、入力パラメータと戻り値を含む最も重要なメソッドからのエントリポイントと終了ポイントをログに記録します(これが大量のデータでない限り)。私はロギングのために5~10%のオーバーヘッドを受け入れるつもりですが(これを測定すべきです)。
マイperferredフォーマットは次のようである:
方法エントリー:
- > MyMethodは(1、 "ARG1")
方法出口:
< -MyMethod(1、 " arg1 ")= true
矢印は、これが入力か終了かを簡単に確認できることを意味します。引数と戻り値を含めることで、エラーを診断するための最も重要なデータが得られます。私は私の方法から1つのリターンポイントしか持っていないので、私はログのために複数の出口点について心配する必要はありません。
ロギングメソッドの入力/終了によって私は多くのことをログに記録する必要はありません。コードがメソッドに適切に分解されている場合、アプリケーションの実行フローが記録されます。
パフォーマンスの低下を心配しているため、十分な情報を記録していないと誤解しないようにしてください。オーバーヘッドに満足していますが、情報に基づいて障害を診断するだけで十分ですそれはログにあります。あなたがしたくないことは、お客様がの後にログをより詳細にに切り替えて、あなたの顧客がフォルトを報告した後、再びフォルトが起こることを期待してください。
私はまた、事実上すべてを記録するDEBUGロギングレベルを使用します。これは、dev/test、またはプロダクションでのみ使用されますが、顧客との協議の後にのみ使用されます。
ちょっとだけ、あなたはAOPを読んでおく必要があります。これはbeforeとafterメソッドの呼び出しロギングを簡単にします。さらに、複製の重複やSISOの制限を取り除くことができます。 –
確かに、これはAOPで行うことができますが、私はAOPを使用していないという正当な理由があります。 – Polyfun
私の同僚の最近のブログで、これについて議論しています。https://engblog.nextdoor.com/2015/08/05/dynamic-logging/ – Mikhail