連載
» 2008年01月08日 00時00分 UPDATE

プログラマーの常識をJavaで身につける(10):入門から実践までJavaで学べる「ログ」の常識 (1/4)

本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、開発現場でのプログラミングやセキュリティに必須の「ログ」について具体的な出力の仕方や設定方法をじっくり解説します。

[伊賀敏樹,株式会社 NTTデータ ビジネスブレインズ]

編集部注

Java言語の基礎を学びたい読者は、連載「【改訂版】Eclipseではじめるプログラミング」をご参照ください。


 今回はログの常識について、Java言語を通じて学んでいきます。多くの場合、ログは「ログファイル」という物理的なファイルに関連付けられて、私たちの前に現れます。

 前回のプロパティの記事と同様、プログラム内では完結せず、外部の物理ファイルとのかかわりが出てくるため、初心者のうちはなかなかなじみにくい技術であるかもしれません。しかし、プログラミングにおいて重要ですので、しっかり習得してしまいましょう。

 前回紹介したプロパティでは、プロパティファイルからの設定情報の読み込みが話題の中心であったのに対し、ログはログファイルへの書き込みが話題の中心となります。入力から出力へと話題が変わるのです。

いまさら聞けない「ログファイル」とは何か?

 皆さんがOSアプリケーションなどを利用していると、ファイル拡張子が「.log」のファイルを見掛けたり、あるいはその内容を確認することがあるかと思います。多くの場合、この拡張子のファイルがログファイルです。

ログファイルの種類

 ログファイルはさまざまな種類のプログラムから出力されます。その出力形式もログファイルによってさまざまです。単純なテキスト形式のログファイルもあれば、XML形式のログファイルなどもあります。

 ログ1件の内容が1行で表されるものもあれば、複数行で表されるものもあります。

ログファイルの中身

 ただし多くの場合、ログの情報として、ログ発生元日付時刻ログの種類メッセージなどの項目が含まれていることと思います。そして、それらの情報を手掛かりに、プログラムが出したメッセージを人間が確認したり、あるいはほかのプログラムが読み込みを行ったりします。

「イベントログ」

 また、ログファイルに類似したものとして、Microsoft Windowsでは「イベントログ」というものが提供されています。

図1 Microsoft Windowsの「イベント ビューア」 図1 Microsoft Windowsの「イベント ビューア」

ログファイルの目的

 このように、さまざまな形で提供されるログファイルですが、主立った利用目的は下記のようになります。

  • プログラムなどの処理や動作の過程を記録する
  • セキュリティ確保のためにログオン・ログオフや操作のログを記録する
  • ユーザーに画面などの対話的な方法を用いて伝えることができないメッセージを伝達する
  • ほかのプログラムと連動する
  • プログラム内部の動きを調べる
これ以外にもログファイルにはさまざまな用途があります。

「ログ」「ロギング」「ロガー」?

 なお、ログファイルに書かれた情報そのものは「ログ(log)」と呼ばれることがあります。また、ログをログファイルに書き込むことを「ロギングlogging)」と呼びます。そしてロギングを行うプログラムは「ロガーlogger)」と呼ばれます。「ログ」とか「ロギング」とか、いろいろな呼び方がありますので、混乱しないようにしてください。

 このように、よく利用されるログ(ログファイル)ですが、プログラマーにとって求められる常識スキルであると同時に、やや難易度が高いものの1つでもあります。しっかり学んでいきましょう。

ロギングを行うための標準Java API

 それでは、Java言語でログをログファイルにロギングするためのJava APIパッケージであるjava.util.loggingを見ていきます。

あまり利用されていないjava.util.loggingパッケージ

 java.util.loggingを紹介するのに先立って、まずは原稿執筆時点(2007年12月)の一般的なJavaロギング事情をお伝えしておきます。原稿執筆時点では、Java言語でロギングを行うために、「Apache log4j」や「Apache Commons Logging」というプロダクトを利用するのが主流となっています。実はjava.util.loggingはあまり利用されていません。

図2 「Apache log4j」のページ 図2 「Apache log4j」のページ
図3 「Apache Commons Logging」のページ 図3 「Apache Commons Logging」のページ
編集部注Apache log4jApache Commons Loggingについて詳しく知りたい読者は、連載「現場に活かすJakarta Project」第9回「効率的なログ出力をCommonsで実現」をご参照ください。

●理由【その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.util.loggingパッケージを使うと、標準のJava APIだけでソースコードが記述できるというメリットもあります。

 Java APIだけを利用していると、追加ライブラリとしてjarファイルを設定することなく、ソースコードのコンパイルや実行ができるようになります。これは大きなメリットであり、魅力的なのです。

 Javaの経験はあるが、java.util.loggingは未経験な方も、これを機会にぜひ一度java.util.loggingを触ってみましょう。

 次ページからは、java.util.loggingパッケージを使ったロギング・プログラミングを解説します。

       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。