2

Throwable.printStackTrace()log4jメソッドを使用する代わりにエラーを出力する必要があるのはいつerror(String, Throwable)ですか?

違いはどこにあり、一般的な使用法は何ですか?

// 乾杯

4

4 に答える 4

4

Throwable.printStackTrace()はスタックトレースを標準エラーに出力しますが、log4jメソッドは希望する場所に出力します。log4j構成ファイルを介して、スタックトレースをいつどのように印刷するかを指定できます。

2番目のアプローチは、エラーを標準エラーに書き込むだけでなく、同時にローリングファイルに出力することもできるため、最適な方法です。プロジェクトにlog4j依存関係が必要になるという欠点がありますが、この依存関係を宣言せずにlog4jを使用し、実行時にのみ提供するソリューションもあります。

編集:一般的な使用法は、log4j apiを使用してコードにログを書き込み、アプリケーションをデプロイする場所でlog4jを構成することです。もう1つの方法は、java.util.loggingを使用してそれらを記述し、直接の依存関係を回避することです。slf4jブリッジを使用して、サードパーティのコードからログをキャプチャし、好みのロギングAPI(log4jなど)に配信できます。

于 2012-05-10T14:22:33.983 に答える
2

エラーを標準エラー出力に出力するため、通常はこれを行いません。このメッセージ(ファイルまたはdb)を永続化しない場合、コンソールを閉じるとすぐに消えます。

このスロー可能オブジェクトとそのバックトレースを標準エラーストリームに出力します。

代わりに、必要なのはLogger.error(String、Throwable)を介してファイルにログを記録することであり、本番環境の問題をデバッグするときにログファイルを見つけることができます。さらに、log4jを使用すると、さまざまな環境に基づいてログに表示されるようにログレベルを構成できます。たとえば、本番環境では、レベル情報、警告、およびエラーレベルのみをログに記録し、開発中はデバッグステートメントもログに記録します。 。

パラメータとして渡されたThrowabletのスタックトレースを含むERRORレベルでメッセージオブジェクトをログに記録します。

最も一般的な使用法は、本番環境で何もログに記録しない場合を除いて、ロガーを介して行うことです。

于 2012-05-10T14:22:52.780 に答える
1

ログを記録している場合は、Log4Jメソッドを使用します。ログを表示/ファイル/コンソール/で読み取るかどうかのハンドルがあります...特定の情報を表示/非表示にするデバッグのレベルを選択できます

Throwable.printStackTraceは、スタックトレースを標準エラーストリームにのみ送信します。

さらに、Log4Jを使用すると、メッセージを簡単に「簡略化」して、ユーザー/開発者に何が起こっているかを知らせることができます。

編集:SLF4Jを確認すると、ロギングバックエンド(この場合はLOG4J)を非常に簡単に変更できます。

于 2012-05-10T14:22:15.057 に答える
1

Throwable.printStackTrace()ロギングよりも優先して使用する唯一の状況は次のとおりです。

  • (何らかの理由で)ロギングを使用できない場合、
  • ユーザーがスタックトレースを常に表示する場合(何らかの理由で)、または
  • デバッグしているときに、迅速でダーティなスタックトレースが必要な場合。

違いはどこにあり、一般的な使用法は何ですか?

基本的に、違いはより高いレベルにあります。System.err.printlnこれは、ロギングにロギングフレームワークを使用することと、ロギングにステートメントを使用することの違いです。

前者には多くの利点があり、さまざまなロギングフレームワークのドキュメントとjavadocsで詳しく説明されています。主なものは次のとおりです。

  • ロギングの単純な細粒度制御。たとえば、レベル、カテゴリなど、
  • ログ情報を記録およびフォーマットするための多くのオプション、および
  • 構成ファイルを使用した、すぐに使用できる広範な構成可能性。

確かに、小さなアプリケーションはこれらすべてを必要としないかもしれませんが、アプリケーションがロギングを行う必要がある場合は、ロギングフレームワークを使用すると、開発またはパフォーマンスのオーバーヘッドを最小限に抑えてこれを無料で利用できます。

于 2012-05-10T14:24:56.587 に答える