289

プログラムでログを使用したい。java.util.loggingについて聞いたのですが、始め方がわかりません。

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

4

3 に答える 3

359

java.util.loggingアプリケーションと一緒にもう 1 つの jar ファイルを持ち歩く必要がなくなり、優れたフォーマッターとうまく連携します。

一般に、すべてのクラスの上部には、次のものが必要です。

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

そうすれば、 Loggerクラスのさまざまな機能をそのまま使用できます。


実行フローの最上位でデバッグする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()ここでは常にメッセージとして渡します。なぜなら、ログ ファイルでgrep -n" " を " " 見たときに、メッセージも表示されるからです。Exceptionそうしないと、スタック ダンプによって生成される出力の次の行になり、その行にも一致するように、より高度な RegEx が必要になります。

于 2013-05-08T19:11:45.823 に答える
71

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

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

したがって、クラス名をリファクタリングすると、次のようになります。

ここに例を挙げてJavaロガーに関する記事を書きました。

于 2012-10-30T06:08:11.800 に答える
55

ロギングには多くの例があり、さまざまなタイプもあります。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");
  }
}
于 2011-05-10T13:14:39.393 に答える