English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基礎教程

Java 流程制御

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Java 異常処理

Java 列表(List)

Java Queue(キュー)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Javaの他のトピック

Java ログ(Logging)

このチュートリアルでは、サンプルを使ってJavaのログ記録とそのさまざまなコンポーネントを学びます。

Javaは、ログ記録プロセスを通じてログメッセージやファイルを作成およびキャプチャすることを許可します。

Javaでは、ログ記録にはフレームワークとAPIが必要です。Javaはjava.util.loggingパッケージに内蔵のログ記録フレームワークを持ちます。

また、サードパーティーのフレームワーク(例えばLog4j、Logbackなど)を使用してログ記録を行います。

Java ログコンポーネント

以下の図は、Java Logging API(java.util.logging)の主要なコンポーネントと指定されたプロセスを示しています。

Javaログプロセス図

1.Logger

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 に設定されている場合、そのレベルは親から継承されます。

2.フィルタ(Filter)

存在する場合)が LogRecord がログを転送できるかを決定します。その名の通り、特定の基準に基づいてログメッセージをフィルタリングします。

フィルタがLogRecordフィルタ(存在する場合)が LogRecord がログを転送できるかを決定します。その名の通り、特定の基準に基づいてログメッセージをフィルタリングします。

// 指定された条件に従って、記録器からログハンドラに、そしてログハンドラから外部システムに伝播されます。
フィルタを設定
// logger.setFilter(filter);
フィルタを取得

3Filter filter = logger.getFilter();

.ハンドラ(出力ソース)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();

4.フォーマットプログラム(Formatter)

ハンドラを使用してFormatterLogRecordオブジェクトフォーマット文字列として処理し、それを外部システムにエクスポートします。

Java SE には 2 つの内蔵のFormatter

フォーマッター使用
SimpleFormatter

LogRecordを文字列形式にフォーマットします

XMLFormatter

LogRecordをXML形式にフォーマットします

以下のコードを使用して処理プログラムをフォーマットすることができます:

// 文字列形式にフォーマットします
handler.setFormatter(new SimpleFormatter());
// XML形式にフォーマットします
handler.setFormatter(new XMLFormatter());

ログ管理器

ログ管理オブジェクトの追跡のグローバルな記録情報を読み取り、メモリエリアとレコーダーオブジェクトを維持します。

ログ管理器はシンプルな singleton であり、これはたった一つのインスタンスがインスタンス化されていることを意味します。

ログ管理器のインスタンスを取得するには、以下のコードを使用します:

LogManager manager = new LogManager();

ログの利点

これはJavaログのいくつかの利点です。

  • プログラムの流れを監視する助けになります

  • 発生する可能性のあるあらゆるエラーをキャッチする助けになります

  • 問題の診断とデバッグにサポートを提供します