まずは、java.util.loggingパッケージを使ったロギングを体験してみましょう。最も原始的なjava.util.loggingの利用例は下記のようになります。
SampleLogging1.java(最も原始的なjava.util.logingパッケージを使ったロギングの例) | |
|
ソースコードを細かく見ていきましょう。
|
SampleLoggingという名前付きサブシステムのロガー(ログを出力するクラスのインスタンス)を取得します(ロガーには何か名前を付ける必要があります。ロガーに与える名前として、伝統的にFQCN(完全修飾クラス名)を利用することが多いです)。
|
ロガーに対して「INFO」レベルでログメッセージを出力します(ログのレベルについては後述します)。
このプログラムを実行すると、(Java実行環境インストールのデフォルト状態では)標準エラー出力に下記のようなメッセージが出力されます(ここでは、Eclipseのコンソールを例に取っています。標準エラー出力なので、赤色でメッセージが表示されています)。
なお、ここで示した例では、ログファイルにはロギングされていません。ここでは、標準エラー出力のみにログ内容が出力されているにすぎないのです。
前の例では、ロギングのために何げなくinfoメソッドを呼び出していました。実は、このメソッドは「ログレベル」と関連付けられています。
ログレベルは、文字通りログ出力制御のレベルを指定するために利用されます。ログ出力の際には、指定されたレベルによってフィルターが掛かる(指定されたレベルより下のログが出力されない)ような仕組みになっています。
java.util.loggingパッケージでは、標準ログレベルのセットがjava.util.logging.Levelクラスで定義されています。ログレベルと対応するjava.util.logging.Loggerクラスの簡易メソッド、そしてそれぞれの意味は下記のような対応付けになっています。
表1 ログレベルの種類(※レベルを昇順で並べています) | ||||||||||||||||||||||||||||||||||||||||
|
それでは、info以外のメソッドを使ってみます。先ほどのログレベルの表で出てきたメソッドをすべて呼び出してみます。
SampleLogging2.java | |
|
ところが、標準エラー出力にはinfo、warning、severeの3メソッドで呼び出したログ内容しか出力されないことが分かります。
2007/11/26 14:41:49 SampleLogging2 main
情報: 生麦生米生卵。
2007/11/26 14:41:49 SampleLogging2 main
警告: あかまきがみ。
2007/11/26 14:41:49 SampleLogging2 main
致命的: すもももももももものうち。
なぜなのでしょう? Java実行環境はデフォルト状態ではINFOレベルより下のレベルのログは出力されないようになっているからなのです。
info、warning、severeの3メソッド以外で呼び出した際のログ出力も標準エラー出力に出てくるようにしたいのですが、それに先立ち、「LogManager 構成プロパティ」の設定を行います。java.util.loggingは、「LogManager 構成プロパティ」というものの設定に従って動作するようになっています。ここでは、最も単純な「LogManager 構成プロパティ」の設定方法を見ていきます。
最も単純な設定方法は、プログラム内部から設定内容を与えてしまう方法です。環境など外部の影響を受けないので、最も簡単で確実に設定変更を与えることができます。
まずは、Java実行環境のデフォルト状態に相当する設定内容を読み込む例を示します。
SampleLogging3.java | |
|
これを実行すると、標準エラー出力に下記のように表示されます。
2007/11/26 15:00:53 SampleLogging3 main
情報: 生麦生米生卵。
2007/11/26 15:00:53 SampleLogging3 main
警告: あかまきがみ。
2007/11/26 15:00:53 SampleLogging3 main
致命的: すもももももももものうち。
ここで、ソースコードを一部説明していきます。
下記の個所は、java.util.loggingの設定情報をプロパティファイル形式で与える(「LogManager 構成プロパティ」)ための定数です。このプロパティファイル自体は、構成ファイルとも呼ばれます。
|
構成ファイルの内容をLOGGING_PROPERTIES_DATA定数にセットします。
|
ハンドラとして、java.util.logging.ConsoleHandlerクラスを設定しています。
|
フィルターする最低レベルをINFOに設定しています。
|
ConsoleHandlerのフィルターするレベルを INFOに設定しています。
+ "java.util.logging.ConsoleHandler.formatter" |
ConsoleHandlerのフォーマッタをjava.util.logging.SimpleFormatterクラスに設定しています。
LogManager.getLogManager().readConfiguration(inStream); |
この個所では、先ほどの設定をjava.util.logging.LogManagerクラスのオブジェクトに与えています。設定された内容は「LogManager 構成プロパティ」と呼ばれます。なお、この設定変更はプログラムが動作しているJava VMプロセスそのものにも影響を与える点に注目してください。
final Logger logger = Logger.getLogger("SampleLogging"); |
ここで、ロガーオブジェクトを取得します。readConfigrationメソッドによって設定変更がされた後のロガーオブジェクトが取得されます。
続いて次ページでは、ログの設定についてさらに解説します。
Copyright © ITmedia, Inc. All Rights Reserved.