プログラムでログを使用したい。java.util.loggingについて聞いたのですが、始め方がわかりません。
ロギングで何ができるかの例はありますか?自分のプログラムでロギングをどのように使用しますか?
プログラムでログを使用したい。java.util.loggingについて聞いたのですが、始め方がわかりません。
ロギングで何ができるかの例はありますか?自分のプログラムでロギングをどのように使用しますか?
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 が必要になります。
このようにロガーを宣言する必要があります:
private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());
したがって、クラス名をリファクタリングすると、次のようになります。
ここに例を挙げてJavaロガーに関する記事を書きました。
ロギングには多くの例があり、さまざまなタイプもあります。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");
}
}