第70回 ロギングその9
引き続き「ロギング」をテーマにしていきます。
前回はロギングフォーマットのカスタマイズを学びました。 今回はログメッセージのカスタマイズを学びます。
過去のサンプルではメッセージの出力にLoggerクラスのinfoメソッド等を使用してきました。 しかし、infoメソッド等では、単純な文字列しか表示できませんでした。 今回使用するlogメソッドではメッセージにパラメータを埋め込むことができます。 Stringクラスのformatメソッドをイメージするとわかりやすいでしょう。
以下のサンプルコードでは、パラメータを使用したログを出力します。 非常に簡易的ですが、データベースへの登録処理のログを想定しています。 プログラムを実行すると同じフォルダにログファイルが作成されます。(J2SE1.4以上対応)
import java.io.IOException; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; public class LogTest { public static void main(String[] args) throws Exception { insertLog(Level.INFO, "Eeb太郎", "従業員表", "EeB花子"); } public static void insertLog(Level level, String user, String table , String record) throws IOException { FileHandler fileHandler = null; String pattern = "LogTest%g.log";// 出力ファイルの名前付けのパターン boolean append = true;// 追記モードを指定する try { // Logger取得 Logger logger = Logger.getLogger(LogTest.class.getName()); // ロギングされないなら終了 if (!logger.isLoggable(level)) { return; } // 追記モードでFileHandler作成 fileHandler = new FileHandler(pattern, append); // ログフォーマット変更 fileHandler.setFormatter(new SimpleFormatter()); // LoggerにHandler追加 logger.addHandler(fileHandler); // ログ出力 logger.log(level, "{0}が{1}に{2}を登録しました。", new Object[] { user , table, record }); } finally { if (fileHandler != null) { fileHandler.close(); } } } }
メッセージにパラメータが反映されているのが確認できますね。
またlogメソッドを使用する場合、動的にログレベルも変更できることも覚えておきましょう。