Javaでログを出力するには、Javaの標準APIであるjava.util.loggingパッケージを利用しする方法がある。

 

ログを出力する

Java標準APIでのログ出力の基本は、java.util.logging.Loggerクラス。

Logger.getLogger()で、ロガーに設定する名称をパラメータで渡し、ロガー(Loggerクラスのインスタンス)を取得する。

ロガーに設定する名称としてFQCN(完全修飾クラス名:this.getClass().getName())を利用することが多い。

log(Level level, String msg)メソッドで、ログレベルとログメッセージをパラメータで渡し、ログを出力する。(ログレベルについては後述)

尚、上記の例では標準エラー出力にのみログ内容が出力され、ファイルには出力されない。

 

ログをファイルに出力する

java.util.logging.FileHandlerクラスを使うことでファイルにも出力できる。

上記の例では、実行ディレクトリのSampleLog.logというファイルにログが出力される。

ただし、出力結果はXML形式となる。

 

ログファイルの出力書式を変更する

Java標準APIでのログ出力の標準設定はXML形式になっているが、FileHandlerに対してjava.util.logging.SimpleFormatterクラスを設定することで、コンソール出力と同じ書式でファイルに出力できる。

 

ログレベルを変更する

ログレベルは、文字通りログ出力制御のレベルを指定するために利用されるもので、java.util.logging.Levelクラスで定義されている。

Java標準APIでのログ出力の標準設定では、ログレベルがINFOまでになっており、INFOレベルより下のレベルのログは出力されない。

ログレベル、対応するLoggerクラスの簡易メソッド、それぞれの意味は下記の通り。

ログレベルの種類(レベルの昇順)

Levelクラス定数Loggerクラス
簡易メソッド
意味
Level.FINESTfinest(String msg)詳細レベル(高)/最も詳細
Level.FINERfiner(String msg)詳細レベル(中)/詳細
Level.FINEfine(String msg)詳細レベル(低)/普通
Level.CONFIGconfig(String msg)設定/構成
Level.INFOinfo(String msg)情報
Level.WARNINGwarning(String msg)警告
Level.SEVEREsevere(String msg)致命的/重大

setLevel()メソッドを使うことで、出力レベルの指定ができる。(”Level.ALL”ですべてのログレベルを出力)

ただし、これで変更されるのはファイルに対する出力レベルのみで、コンソールへの出力は変わらない。

 

例外のスタックトレースを出力する

log(Level level, String msg, Throwable thrown)メソッドを利用することで、例外やエラーのスタックトレースを出力することができる。

 

追加モードで出力する

出力ファイルを追加モードで指定しない場合、実行の度にログファイルが上書きされる。(過去のログが消える)

これを回避する為には、パラメータが2つあるFileHandlerのコンストラクタを使い、第2パラメータにtrueを設定する。