第63回 ロギングその2
引き続き「ロギング」をテーマにしていきます。
前回のサンプルでは、ログはコンソールに出力されました。
今回は、ログをファイルに出力する方法を学んでいきましょう。
ログを出力するにあたり、LoggerはログメッセージをHandlerオブジェクトに転送します。
出力先を変更するには、Handlerオブジェクトを使いわければよいのです。
コンソールに出力する場合、ConsoleHandlerを使います。
そして、ファイルに出力する場合は、FileHandlerを使うのです。
以下のサンプルコードでは、匿名Loggerオブジェクトを作ってログ出力をしています。
プログラムを実行すると同じフォルダにログファイルが作成されます。(J2SE1.4以上対応)
import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; public class HandlerTest { public static void main(String[] args) throws Exception { FileHandler fileHandler = null; try { // 匿名Logger取得 Logger logger = Logger.getAnonymousLogger(); // Loggerのログレベル指定 logger.setLevel(Level.FINER); // FileHandler作成 fileHandler = new FileHandler("HandlerTest.log"); // Handlerのログレベル指定 fileHandler.setLevel(Level.CONFIG); // LoggerにHandler追加 logger.addHandler(fileHandler); // ログ出力 logger.severe("SEVERE は重大な障害を示すメッセージレベルです。 "); logger.warning("WARNING は潜在的な問題を示すメッセージレベルです。 "); logger.info("INFO はメッセージを情報として提供するメッセージレベルです。 "); logger.config("CONFIG は静的な構成メッセージのメッセージレベルです。"); logger.fine("FINE はトレース情報を提供するメッセージレベルです。 "); logger.finer("FINER はかなり詳細なトレースメッセージを示します。 "); logger.finest("FINEST は非常に詳細なトレースメッセージを示します。 "); } finally { // ファイルを閉じる if (fileHandler != null) { fileHandler.close(); } } } }
作成されたログファイルの中身を確認するとXML形式になっています。
これはFileHandlerのデフォルトのフォーマッターがXMLFormatterであるためです。
JREのlibフォルダの中のlogging.propertiesファイルでその設定がされています。
# default file output is in user's home directory. java.util.logging.FileHandler.pattern = %h/java%u.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
デフォルトのファイル出力先も確認できます。
出力先を指定しない場合、ユーザーのホームディレクトリに出力されます。
また、LoggerのログレベルはFINERに設定されているのに、INFOまでしか出力されていません。
これはHandlerオブジェクトにもログレベルの設定があるためです。
ソース中のHandlerのログレベルの設定処理をコメントアウトすると、FINERまで出力されます。
Loggerにログレベルを設定したにも関わらず出力されない場合、Handlerを確認しましょう。
次回はファイルへの出力をもう少し細かくやっていきます。