JavaのLogging APIのクラスの分類
分類しようと思ったきっかけ
今現在、仕事で作成しているJavaのプログラムでログを出力したいと思っていおります。
Javaでログ出力をする手段としてLogging APIやLog4J、Jakarta commons-logging、SLF4J(Simple Logging Facade for Java)等、複数の候補があるようですが、どれも使用したことがありません。
まずは、Java SE APIに含まれていて、単純だと聞いたことのある、Logging APIを使ってみることにしました。
今日やったこと
手始めに、Java Platform, Standard Edition 6 API 仕様のjava.util.loggingパッケージの中身を見てみました。
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/logging/package-summary.html
インタフェースが2個に、クラスが15個あります。
クラスが15個もあり、パッと見なんだかよくわからないので、クラスの分類を行ってみました。
分類の基準は、クラス名の末尾の単語です。
java.util.loggingパッケージのクラス分類表
分類 | クラス名 | 概要 |
---|---|---|
Logger | Logger | ロガー |
Formatter | Formatter | フォーマッタ |
XMLFormatter | XML形式のフォーマッタ | |
SimpleFormatter | 簡単なフォーマッタ | |
Handler | Handler | ログ出力 |
ConsoleHandler | 標準エラーへのログ出力 | |
FileHandler | ファイルへのログ出力 | |
MemoryHandler | メモリへのログ出力 | |
SocketHandler | ネットワークへのログ出力 | |
StreamHandler | ストリームへのログ出力 | |
Level | Level | ロギングレベル |
Manager | ErrorManager | Handlerで発生するエラーの管理 |
LogManager | ロガーの名前空間の階層構造とログ制御用プロパティの管理 | |
Permission | LoggingPermission | ロギングのアクセス権 |
Record | LogRecord | LoggerからHandlerに渡されるログメッセージ |
余談ですが、分類しながら思ったこと
最初からこれぐらいの細かさでパッケージが分かれていると、わざわざ分類の手間が省けるのですが。
あまり細かく分けるのもどうかと思いますし、どういうパッケージ分けがよいか、まだ結論は出ていないです。
大事そうな分類
Logger
アプリケーションからログをはく場合には、Loggerオブジェクトを使用すればよいようです。
Formatter
ログの書式を決められるようです。
個人的には、grepしやすいフォーマットがよいですが、SimpleFormatterで用が足りるのでしょうか?
Handler
Handlerにより、さまざまな出力先へのログ出力が行えるようです。
DBに書き込むようなHandlerの実装もきっとできるのでしょうね。
さいごに
とりあえず、Loggerへの呼び出しコードをプログラム内に書いておけば、他のものは切り替えが効きそうな予感です(ざっくり)。
というわけで、明日は早速、Logging APIを使用して、ログ出力を試してみようと思います。