step
1java.util.loggingとは
java.util.loggingは、Javaの標準APIとしてログ出力などをサポートするためのパッケージです。
ロギングAPIの主な目的は、顧客サイトでのソフトウェアの管理とサービスをサポートすることです。
ログを使用する目的は、リソース不足、セキュリティ障害、および単純な設定エラーなど、ローカルで修復または追跡可能な問題の履歴を抽出するために用います。また開発中のアプリケーションのデバッグを支援する目的でも使用されます。
このパッケージの主な要素は次のとおりです。
- Logger : アプリケーションがロギング呼出しを行う際に使用する主要エンティティです。 Loggerオブジェクトは、特定のシステム・コンポーネントやアプリケーション・コンポーネントのメッセージをロギングするために使用されます。
- LogRecord : これを使用して、ログ・フレームワークと個々のログ・ハンドラとの間のロギング要求を渡します。
- Handler : メモリー、出力ストリーム、コンソール、ファイル、ソケットなど、さまざまな出力先にLogRecordオブジェクトをエクスポートします。 この目的のために、さまざまなHandlerサブクラスが存在しています。 追加のHandlerがサード・パーティで開発され、コア・プラットフォームに加えて提供される場合があります。
- Level : ログ出力を制御するために使用される標準ログ・レベルのセットを定義します。 プログラムはほかのレベルでの出力を無視して一部のレベルのログを出力するよう構成できます。
- Filter : ログ・レベルが提供する制御を超えた、ログ・データに対するきめ細かい制御を行います。 ロギングAPIがサポートする汎用フィルタ・メカニズムを使えば、アプリケーション・コードは、任意のフィルタを接続してロギングの出力を制御できます。
- Formatter : LogRecordオブジェクトのフォーマット処理のサポートを提供します。 このパッケージにはSimpleFormatter、XMLFormatterの2つのフォーマッタが含まれています。これらはそれぞれ、ログ・レコードをプレーン・テキスト、XMLでフォーマットするためのものです。 Handlerと同様に、追加Formatterがサード・パーティで開発される場合があります。
step
2java.util.loggingの利用手順
java.util.loggingパッケージを利用するためには、特別な手順は必要ありません。
必要なクラスをimportしてコードを記載するだけで利用することが可能です。
以下にjava.util.loggingパッケージのクラスを利用した、ログ出力のサンプルを記載します。
※サンプルコード作成の際、module-info.javaを作成すると正常に動作しません。module-info.javaを作成する場合は利用クラスをrequiresで指定してください。
LoggingSample.java
import java.lang.Exception;
import java.util.logging.*;
public class LoggingSample {
public static void main(String[] arg) {
// ロガーを取得(ロギングの対象のパッケージ名やクラス名を引数とする)
Logger logger = Logger.getLogger("LoggingSample");
try{
// ログレベルを設定(INFOに設定した場合これより低いレベルのメッセージは破棄される)
logger.setLevel(Level.INFO);
// ハンドラーを作成してロガーに追加
Handler handler = new FileHandler("sample.log");
logger.addHandler(handler);
// フォーマッターを作成してハンドラーに登録
Formatter formatter = new SimpleFormatter();
handler.setFormatter(formatter);
// それぞれのログレベルのメッセージを出力(指定されたログレベル以上のものだけが出力される)
logger.finest("最も詳細な(FINEST)メッセージ");
logger.finer("詳細な(FINER)メッセージ");
logger.fine("通常(FINE)メッセージ");
logger.config("構成(CONFIG)メッセージ");
logger.info("情報(INFO)メッセージ");
logger.warning("警告(WARNING)メッセージ");
logger.severe("重大(SEVERE)メッセージ");
// log()を使用して指定のログレベルメッセージを出力
logger.log(Level.INFO, "情報(INFO)メッセージ");
throw new Exception();
} catch (Exception e) {
// 引数に渡された例外クラスのスタックトレースを出力
logger.log(Level.WARNING, "エラーが発生しました", e);
}
}
}