質問

エネルギーを使っています(http://www.enerjy.com/) Java コードの静的コード アナライザー ツール。次の行がそれを示しています。

System.err.println("そのデータベースは無視されました");

System.err を使用しているため、問題があります。正確なエラーは次のとおりです。「JAVA0267 System.err の使用」

System.err を使用すると何が問題になるのでしょうか?

役に立ちましたか?

解決

短い答え:それは、ログ記録の目的のためにそれを使用することは悪い習慣と考えられている。

これは、その昔ときがどこなし受け入れ/広く利用可能なログフレームワークの観察で、誰もがコンソールにエラーメッセージとスタックトレースを印刷するのにはSystem.errを使用しました。このアプローチは、開発や地元のテスト段階で適切なものがありますが、重要なエラーメッセージを失う可能性があるため、本番環境には適していません可能性があります。このため、ほとんどすべての静的解析ツールは、今日ではこの種のコードが検出され、悪い習慣(または似た名前の問題を)フラグが設定されます。

ターンのLoggingフレームワークは、彼らが様々な永続的な場所にメッセージを保存できるよう、あなたのイベントとエラーメッセージを記録するために構造化された論理的な方法を提供(など、デシベルを記録し、ログファイル。)。

最も明白な(と外部依存関係のない)<ストライキ>ハック解像度はそれがデフォルトでコンソールへのロギングイベントを転送するようjava.util.logging.Loggerクラスを通じてJavaロギングフレームワークに組み込まれて使用することです。たとえばます:

final Logger log = Logger.getLogger(getClass().getName());
...
log.log(Level.ERROR, "Something went wrong", theException);

(またはあなたがちょうどその解析オプションをオフにできます)。

他のヒント

エラーの記述子は次のとおりです。

System.err の使用は、残留デバッグまたは定型コードを示している可能性があります。Apache Commonsなどのフル機能のロギングパッケージを使用して、エラーロギングを処理することを検討してください。

ログ記録の目的で System.err を使用しているようですが、これはいくつかの理由から最適ではありません。

  • アプリケーションのバイナリを変更せずに実行時にロギングを有効にすることは不可能です
  • ロギング動作は構成ファイルの編集では制御できません
  • おそらく他にもたくさんの

私はロギングフレームワークを使用する方法について、上記の点に同意する一方で、私はまだ一つの場所に出力をSystem.err使用する傾向がある:シャットダウンフックの中で。私は、彼らがシャットダウンフックで発生した場合に使用している場合は、java.util.loggingフレームワークのログステートメントが常に表示されていないことを発見したためです。ログライブラリは、おそらく、ログファイルや他のリソースをクリーンアップするために、独自のシャットダウンフックが含まれており、あなたがシャットダウンフックの実行順序に依存することはできませんように、あなたが期待どおりに動作し文<=>に頼ることができないためです。

これについての詳細はこちらのリンク(「コメント」セクションを)チェックします。

http://weblogs.java.net/blog/ dwalend /アーカイブ/ 2004/05 / shutdown_hooks_2.htmlする

(もちろん、他の選択肢は異なるロギング・フレームワークを使用することである。)

System.errのは何よりも、デバッグのため本当に多くのです。適切な例外処理、よりユーザーフレンドリーであることが好ましい方法でエラーに対処します。ユーザーがエラーを見るために意図されている場合は、代わりにするSystem.out.printlnを使用します。

あなたが開発者の立場から、これらのエラーを追跡したい場合は、ロガーを使用する必要があります。

それはどこの出力は、ファイルとして保存し、分析することができますので、メッセージを、約もっと柔軟性があるロギングフレームワークを使用するより良い練習と見なされるように、

System.errに書かれたものが一般的に、実行時に失われます。

非コンソールアプリケーションのための

をSystem.errとのSystem.outにのみ、これまでの彼または彼女のIDEでコードを実行している開発者が見られ、そしてアイテムが生産にトリガされた場合、有用な情報が失われることがあります。

System.err.printlnとするSystem.out.printlnはlogggingインタフェースとして使用すべきではありません。 STD-出力およびSTD-エラーが発生しました(これらはSystem.outおよび.ERRによって書かれている)コマンドライン・ツールからのメッセージです。

をSystem.errは、コンソールに出力します。これは、(コンソールのみが非常に多くの行を保存)宿題をテストする学生に適したかもしれないが、これらのメッセージは表示されませんアプリケーションには不向きとなります。

より良いアプローチは、通常はコンソールに送信されますでしょうメッセージを保持している例外をスローすることです。これに代わるものは永遠に保存することができるファイルにこのメッセージを格納しますサードパーティのロギングソフトウェアを使用することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top