Java ロギング
Java ロギング
このチュートリアルでは、Java Logging とそのさまざまなコンポーネントについて、例を使って学習します。
Java を使用すると、ロギングのプロセスを通じてログ メッセージとファイルを作成およびキャプチャできます。
Java では、ロギングにはフレームワークと API が必要です。 Java には java.util.logging
に組み込みのロギング フレームワークがあります。 パッケージ。
また、Log4j、Logback などのサードパーティ フレームワークをログの目的で使用することもできます。
Java ロギング コンポーネント
次の図は、コア コンポーネントと Java Logging API の制御の流れを表しています (java.util.logging
).
1.ロガー
Logger
クラスは、ロギングのためのメソッドを提供します。 Logger
からオブジェクトをインスタンス化できます
例を見てみましょう。
Logger logger = Logger.getLogger("newLoggerName");
getLogger()
Logger
のメソッド クラスは、新しい Logger
を検索または作成するために使用されます .文字列引数は、ロガーの名前を定義します。
ここでは、これにより新しい Logger
が作成されます オブジェクトまたは既存の Logger
を返します
Logger
を定義するのが慣習です class.getName()
を使用して現在のクラスの後に .
Logger logger = Logger.getLogger(MyClass.class.getName());
注: このメソッドは NullPointerException
をスローします 渡された名前が null
の場合 .
各 Logger
ログメッセージの重要度を決定するレベルがあります。 7 つの基本的なログ レベルがあります:
ログレベル (降順) | 使用 |
---|---|
重度 | 重大な失敗 |
警告 | 警告メッセージ、潜在的な問題 |
情報 | 一般的なランタイム情報 |
構成 | 構成情報 |
良い | 一般的な開発者情報 (トレース メッセージ) |
さらに細かく | 詳細な開発者情報 (トレース メッセージ) |
最高 | 非常に詳細な開発者情報 (トレース メッセージ) |
オフ | すべてのレベルのログをオフにする (何もキャプチャしない) |
すべて | すべてのレベルのログを有効にする (すべてをキャプチャ) |
各ログ レベルには、2 つの特別なログ レベル OFF
を除いて、重大度を決定する整数値があります。 と ALL
.
メッセージのログ
デフォルトでは、上位 3 つのログ レベルが常にログに記録されます。別のレベルを設定するには、次のコードを使用できます:
logger.setLevel(Level.LogLevel);
// example
logger.setLevel(Level.FINE);
この例では、レベル FINE
のみ それ以上のレベルはログに記録されるように設定されています。他のすべてのログ メッセージは破棄されます。
メッセージをログに記録するには、 log()
を使用します メソッド。
logger.log(Level.LogLevel, "log message");
// example
logger.log(Level.INFO, "This is INFO log level message");
必要なレベルでログを記録する簡単な方法があります。
logger.info( "This is INFO log level message");
logger.warning( "This is WARNING log level message");
設定されたログ レベルを通過したすべてのログ リクエストは、LogRecord に転送されます .
注: ロガーのレベルが null
に設定されている場合 、そのレベルは親から継承され、ツリーを上っていきます。
2.フィルター
フィルタ (存在する場合) は、LogRecord 転送する必要があるかどうか。名前が示すように、特定の基準に従ってログ メッセージをフィルタリングします。
LogRecord 指定された基準に合格した場合にのみ、ロガーからログ ハンドラーに渡され、ログ ハンドラーから外部システムに渡されます。
// set a filter
logger.setFilter(filter);
// get a filter
Filter filter = logger.getFilter();
3.ハンドラー (アペンダー)
ログ ハンドラーまたはアペンダーが LogRecord を受け取ります さまざまなターゲットにエクスポートします。
Java SE は 5 つの組み込みハンドラーを提供します:
ハンドラー | 使用 |
---|---|
StreamHandler | OutputStream に書き込みます |
ConsoleHandler | コンソールへの書き込み |
FileHandler | ファイルへの書き込み |
SocketHandler | リモート TCP ポートへの書き込み |
MemoryHandler | メモリへの書き込み |
ハンドラは LogRecord を渡すことができます 外部システムに転送できるかどうかを再度判断するためにフィルターに送信します。
新しいハンドラーを追加するには、次のコードを使用します:
logger.addHandler(handler);
// example
Handler handler = new ConsoleHandler();
logger.addHandler(handler);
ハンドラーを削除するには、次のコードを使用します:
logger.removeHandler(handler);
// example
Handler handler = new ConsoleHandler();
logger.addHandler(handler);
logger.removeHandler(handler);
ロガーは複数のハンドラーを持つことができます。すべてのハンドラーを取得するには、次のコードを使用します:
Handler[] handlers = logger.getHandlers();
4.フォーマッター
ハンドラーは フォーマッター も使用できます LogRecord をフォーマットします オブジェクトを外部システムにエクスポートする前に文字列に変換します。
Java SE には 2 つの組み込み フォーマッタ があります :
フォーマッター | 使用 |
---|---|
SimpleFormatter | フォーマット LogRecord 文字列へ |
XMLFormatter | フォーマット LogRecord XML形式へ |
次のコードを使用してハンドラをフォーマットできます:
// formats to string form
handler.setFormatter(new SimpleFormatter());
// formats to XML form
handler.setFormatter(new XMLFormatter());
ログマネージャー
ログマネージャー オブジェクトは、グローバル ログ情報を追跡します。ログ構成とロガー インスタンスを読み取り、維持します。
ログ マネージャーはシングルトンです。つまり、そのインスタンスは 1 つだけインスタンス化されます。
ログ マネージャー インスタンスを取得するには、次のコードを使用します:
LogManager manager = new LogManager();
ロギングの利点
Java でログインする利点のいくつかを次に示します。
- プログラムの流れを監視するのに役立ちます
- 発生する可能性のあるエラーを把握するのに役立ちます
- 問題の診断とデバッグのサポートを提供する
Java