本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、開発現場でのプログラミングやセキュリティに必須の「ログ」について具体的な出力の仕方や設定方法をじっくり解説します。
今回はログの常識について、Java言語を通じて学んでいきます。多くの場合、ログは「ログファイル」という物理的なファイルに関連付けられて、私たちの前に現れます。
前回のプロパティの記事と同様、プログラム内では完結せず、外部の物理ファイルとのかかわりが出てくるため、初心者のうちはなかなかなじみにくい技術であるかもしれません。しかし、プログラミングにおいて重要ですので、しっかり習得してしまいましょう。
前回紹介したプロパティでは、プロパティファイルからの設定情報の読み込みが話題の中心であったのに対し、ログはログファイルへの書き込みが話題の中心となります。入力から出力へと話題が変わるのです。
皆さんがOSやアプリケーションなどを利用していると、ファイル拡張子が「.log」のファイルを見掛けたり、あるいはその内容を確認することがあるかと思います。多くの場合、この拡張子のファイルがログファイルです。
ログファイルはさまざまな種類のプログラムから出力されます。その出力形式もログファイルによってさまざまです。単純なテキスト形式のログファイルもあれば、XML形式のログファイルなどもあります。
ログ1件の内容が1行で表されるものもあれば、複数行で表されるものもあります。
ただし多くの場合、ログの情報として、ログ発生元、日付、時刻、ログの種類、メッセージなどの項目が含まれていることと思います。そして、それらの情報を手掛かりに、プログラムが出したメッセージを人間が確認したり、あるいはほかのプログラムが読み込みを行ったりします。
また、ログファイルに類似したものとして、Microsoft Windowsでは「イベントログ」というものが提供されています。
このように、さまざまな形で提供されるログファイルですが、主立った利用目的は下記のようになります。
なお、ログファイルに書かれた情報そのものは「ログ(log)」と呼ばれることがあります。また、ログをログファイルに書き込むことを「ロギング(logging)」と呼びます。そしてロギングを行うプログラムは「ロガー(logger)」と呼ばれます。「ログ」とか「ロギング」とか、いろいろな呼び方がありますので、混乱しないようにしてください。
このように、よく利用されるログ(ログファイル)ですが、プログラマーにとって求められる常識スキルであると同時に、やや難易度が高いものの1つでもあります。しっかり学んでいきましょう。
それでは、Java言語でログをログファイルにロギングするためのJava APIパッケージであるjava.util.loggingを見ていきます。
java.util.loggingを紹介するのに先立って、まずは原稿執筆時点(2007年12月)の一般的なJavaロギング事情をお伝えしておきます。原稿執筆時点では、Java言語でロギングを行うために、「Apache log4j」や「Apache Commons Logging」というプロダクトを利用するのが主流となっています。実はjava.util.loggingはあまり利用されていません。
●理由【その1】歴史的背景
これには、まず歴史的な背景があるものと考えられます。Java APIでロギングがサポートされたのはJ2SE 1.4からです。それ以前のバージョンでは、java.util.loggingパッケージは存在しませんでした。このため、ある程度古くから存在するJava関連プロダクトの多くはApache log4jを利用していました。
●理由【その2】古いバージョンだと使えない
また、J2SE 1.4より前のバージョンをサポートしなくてはならないJava関連プロダクトも、必然的にjava.util.loggingパッケージは利用できません(ちなみに、Apache log4jとApache Commons Loggingは親和性が高いので、Apache Commons Loggingへの移行は比較的進めやすいのです)。
●理由【その3】経験の蓄積
さらに、利用者やプログラマーもApache log4jや Apache Commons Loggingに慣れており、経験も蓄積されているので、「java.util.loggingを利用してみよう」というきっかけがなかなか得られない、またはjava.util.loggingに移行するメリットが見いだせない、といった状況もあります。
●理由【その4】「ない」機能がある
なお、Apache Commons Logging(そして、Apache log4j)には、java.util.loggingにはない機能があります。そういったことも、java.util.loggingに移行しない理由の1つなのでしょう。
このように、現時点ではあまり利用されていないjava.util.loggingパッケージですが、一方でjava.util.loggingパッケージを使うと、標準のJava APIだけでソースコードが記述できるというメリットもあります。
Java APIだけを利用していると、追加ライブラリとしてjarファイルを設定することなく、ソースコードのコンパイルや実行ができるようになります。これは大きなメリットであり、魅力的なのです。
Javaの経験はあるが、java.util.loggingは未経験な方も、これを機会にぜひ一度java.util.loggingを触ってみましょう。
次ページからは、java.util.loggingパッケージを使ったロギング・プログラミングを解説します。
Copyright © ITmedia, Inc. All Rights Reserved.