プログラムでログを使用したい。java.util.loggingについて聞きましたが、開始方法がわかりません。
ロギングでできることの例はありますか?自分のプログラムでロギングをどのように使用しますか?
プログラムでログを使用したい。java.util.loggingについて聞きましたが、開始方法がわかりません。
ロギングでできることの例はありますか?自分のプログラムでロギングをどのように使用しますか?
回答:
java.util.logging
アプリケーションでjarファイルをもう1つ作成する必要がなくなり、優れたFormatterでうまく機能します。
一般に、すべてのクラスの上部には、次のものが必要です。
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を使用する必要があります。
.fine()
メソッドを使用してログに記録しますが、メッセージを表示できないようです...
多くの例があり、ロギングにはさまざまなタイプがあります。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");
}
}
Main.class.getSimpleName()
ですか?このように、リファクタリングツールは必要に応じて適切に変更しますが、2番目のソリューションほど簡単ではありません。
SLF4Jは、Apache Commons Logging(ACL)よりも優れたロギングファサードです。これは他のロギングフレームワークへのブリッジを備えており、ACL、Log4J、またはJava Util Loggingへの直接呼び出しをSLF4J経由で行うため、必要に応じて、1つのログ構成ファイルだけですべての出力を1つのログファイルに転送できます。アプリケーションで複数のロギングフレームワークを使用するのはなぜですか?使用しているサードパーティのライブラリ、特に古いライブラリはおそらく使用するためです。
SLF4Jは、さまざまなロギング実装をサポートしています。すべてを標準出力に出力したり、Log4Jを使用したり、Logback(Log4Jよりも推奨)を使用したりできます。
Apacheのcommons loggingユーティリティを使用することをお勧めします。それは非常にスケーラブルであり、異なるロガーの個別のログファイルをサポートします。こちらをご覧ください。