web-dev-qa-db-ja.com

Java.util.loggingを使った良い例

私は自分のプログラムでログを使いたいのです。 Java.util.logging について聞いたことがありますが、始める方法がわかりません。

ロギングでできることの例はありますか?自分のプログラムでロギングをどのように使用しますか?

252
Renato Dinhani

Java.util.logging はあなたがあなたのアプリケーションと一緒にもう一つのjarファイルを取り囲む必要がないようにしてくれます、そしてそれは良いFormatterとうまく働きます。

一般的に、 すべてのクラスの先頭に があるはずです。

private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );

その後、 Logger クラスのさまざまな機能を使用することができます。


実行フローの最上位レベルで debugging になっている場合は、Level.FINEを使用します。

LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );

ループの中や、基本的なフローの問題をデバッグするときにそれほど詳細を知る必要がない場合がある場所では、Level.FINER/Level.FINESTを使用します。

LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );

パラメータ化されたバージョンのロギング機能を使用して、GCが追いつく必要がある大量の文字列連結ガベージを生成しないようにします。上記のようなObject[]は、通常スタック割り当てでは安価です。


例外処理では、常に完全な例外の詳細をログに記録します。

try {
    ...something that can throw an ignorable exception
} catch( Exception ex ) {
    LOGGER.log( Level.SEVERE, ex.toString(), ex );
}

私はいつもex.toString()をここでメッセージとして渡します、それで私がログファイルで "Exception"のために "grep -n"をするとき、私はメッセージも見ることができるからです。さもなければ、それはスタックダンプによって生成された出力の次の行になるでしょう、そしてあなたはその行にもマッチするためにもっと高度なRegExを持っていなければなりません。

308
grwww

このようにロガーを宣言する必要があります。

private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());

だからあなたがあなたのクラス名をリファクタリングすればそれは後に続く。

私は example here でJavaロガーに関する記事を書きました。

66
hanoo

ロギングには多くの例とさまざまなタイプがあります。 Java.util.logging パッケージを見てください。

コード例:

import Java.util.logging.Logger;

public class Main {

  private static Logger LOGGER = Logger.getLogger("InfoLogging");

  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}

クラス名 :をハードコーディングしないでください。

import Java.util.logging.Logger;

public class Main {
  private static final Logger LOGGER = Logger.getLogger(
    Thread.currentThread().getStackTrace()[0].getClassName() );

  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}
48
Ankit

SLF4Jは、Apache Commons Logging(ACL)よりも優れたロギングファサードです。 ACL、Log4J、またはJava Util Loggingへの直接呼び出しがSLF4Jを通過するようにして、他のロギングフレームワークへの橋渡しをするので、必要に応じて1つのログ設定ファイルですべての出力を1つのログファイルに転送できます。アプリケーションが複数のロギングフレームワークを使用するのはなぜですか?サードパーティのライブラリ、特に古いライブラリを使用するのではないでしょうか。

SLF4Jはさまざまなロギング実装をサポートしています。すべて標準出力、Log4J、またはLogback(Log4Jよりも推奨)に出力できます。

http://www.slf4j.org/

http://logback.qos.ch/

21
bcody

私は minlog を使用します。ロギングクラスは数百行のコードなので、非常に簡単です。

9
Chris Dennett

Apacheのcommons loggingユーティリティを使用することをお勧めします。それは非常にスケーラブルであり、異なるロガーのために別々のログファイルをサポートします。 ここを見なさい

0
nIKUNJ