English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、サンプルを使ってJavaのログ記録とそのさまざまなコンポーネントを学びます。
Javaは、ログ記録プロセスを通じてログメッセージやファイルを作成およびキャプチャすることを許可します。
Javaでは、ログ記録にはフレームワークとAPIが必要です。Javaはjava.util.loggingパッケージに内蔵のログ記録フレームワークを持ちます。
また、サードパーティーのフレームワーク(例えばLog4j、Logbackなど)を使用してログ記録を行います。
以下の図は、Java Logging API(java.util.logging)の主要なコンポーネントと指定されたプロセスを示しています。
Loggerクラスは、ログ記録を行うためのメソッドを提供します。Loggerクラスからオブジェクトをインスタンス化し、そのメソッドを呼び出して記録を行うことができます。
例を示しましょう。
Logger logger = Logger.getLogger("newLoggerName");
LoggerクラスのgetLogger()メソッドは、新しいLoggerを検索または作成するために使用されます。文字列パラメータはloggerの名前を定義します。
ここでは、新しいLoggerオブジェクトを作成したり、同じ名前のLoggerオブジェクトを返します。
慣習に従って、class.getName()を使用して現在のクラスの後にLoggerを定義します。
Logger logger = Logger.getLogger(MyClass.class.getName());
注意:渡された名前がnullの場合、このメソッドはNullPointerExceptionをスローします。
各Loggerには、ログメッセージの重要性を決定するレベルがあります。以下の通りです:7基本ログレベル:
ログレベル(降順) | 使用 |
---|---|
SEVERE | 深刻な障害 |
WARNING | 警告メッセージ、潜在的な問題 |
INFO | 通常のランタイム情報 |
CONFIG | 設定情報 |
FINE | 普通の開発者情報(トレースメッセージ) |
FINER | 詳細な開発者情報(トレースメッセージ) |
FINEST | 非常に詳細な開発者情報(トレースメッセージ) |
OFF | すべてのレベルのログ記録を閉じます(何もキャッチしません) |
ALL | すべてのレベルのログ記録を開きます(すべての内容をキャッチします) |
各ログレベルには、その重要度を決定するための整数値があります。ただし、特別なログレベルのOFFおよびALLを除きます。
デフォルトでは、常に最初の3つのログレベルが記録されます。他のレベルを設定するには、以下のコードを使用できます:
logger.setLevel(Level.LogLevel); // 例 logger.setLevel(Level.FINE);
このサンプルでは、Level.FINEおよびその上位のレベルのみがログ記録として設定されています。他のすべてのログメッセージを削除します。
現在は、ログメッセージを記録するために、このlog()メソッドを使用します。
logger.log(Level.LogLevel, "log message"); // 例 logger.log(Level.INFO, "This is INFO log level message");
必要なレベルの記録に用いる短縮メソッドがあります。
logger.info("これはINFOログレベルのメッセージ"); logger.warning("これはWARNINGログレベルのメッセージ");
次に、設定されたログレベルのすべてのログリクエストが以下に転送されますLogRecord
注意:ログレコーダーのレベルが null に設定されている場合、そのレベルは親から継承されます。
存在する場合)が LogRecord がログを転送できるかを決定します。その名の通り、特定の基準に基づいてログメッセージをフィルタリングします。
フィルタがLogRecordフィルタ(存在する場合)が LogRecord がログを転送できるかを決定します。その名の通り、特定の基準に基づいてログメッセージをフィルタリングします。
// 指定された条件に従って、記録器からログハンドラに、そしてログハンドラから外部システムに伝播されます。 フィルタを設定 // logger.setFilter(filter); フィルタを取得
.ハンドラ(出力ソース)LogRecordログハンドラやアドオンは以下を受け取ります
Java SE は以下を提供し、それをさまざまなターゲットにエクスポートします。5の内蔵ハンドラがあります:
ハンドラ | 使用 |
---|---|
StreamHandler | OutputStreamに書き込むことができます |
ConsoleHandler | コンソールに書き込むことができます |
FileHandler | ファイルに書き込むことができます |
SocketHandler | リモート TCP ポートに書き込むことができます |
MemoryHandler | メモリに書き込むことができます |
ハンドラはLogRecordフィルタに渡され、外部システムに転送できるか再度確認します。
新しいハンドラを追加するには以下のコードを使用します:
logger.addHandler(handler); // 例 Handler handler = new ConsoleHandler(); logger.addHandler(handler);
ハンドラを削除するには以下のコードを使用します:
logger.removeHandler(handler); // 例 Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
レコーダーには複数のハンドラが存在できます。すべてのハンドラを取得するには以下のコードを使用します:
Handler[] handlers = logger.getHandlers();
ハンドラを使用してFormatterをLogRecordオブジェクトフォーマット文字列として処理し、それを外部システムにエクスポートします。
Java SE には 2 つの内蔵のFormatter:
フォーマッター | 使用 |
---|---|
SimpleFormatter | LogRecordを文字列形式にフォーマットします |
XMLFormatter | LogRecordをXML形式にフォーマットします |
以下のコードを使用して処理プログラムをフォーマットすることができます:
// 文字列形式にフォーマットします handler.setFormatter(new SimpleFormatter()); // XML形式にフォーマットします handler.setFormatter(new XMLFormatter());
ログ管理オブジェクトの追跡のグローバルな記録情報を読み取り、メモリエリアとレコーダーオブジェクトを維持します。
ログ管理器はシンプルな singleton であり、これはたった一つのインスタンスがインスタンス化されていることを意味します。
ログ管理器のインスタンスを取得するには、以下のコードを使用します:
LogManager manager = new LogManager();
これはJavaログのいくつかの利点です。
プログラムの流れを監視する助けになります
発生する可能性のあるあらゆるエラーをキャッチする助けになります
問題の診断とデバッグにサポートを提供します