【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
Java目線でコンパイラの仕組みをのぞいてみよう!
プログラマーの常識をJavaで身につける (10)

入門から実践までJavaで学べる「ログ」の常識


株式会社 NTTデータ ビジネスブレインズ
伊賀敏樹
2008/1/10


本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます(編集部注:Java言語の基礎を学びたい読者は、連載「Eclipseではじめるプログラミング」や連載「いまから始めるJava」をご参照ください)。

今回の主な内容

いまさら聞けない「ログファイル」とは何か?
ロギングを行うための標準Java API
【入門1】はじめてのロギング
【入門2】info以外のメソッドも使うには?
【入門3】ログファイルにログを出力するには?
【実践】開発現場におけるロギングの実際
【参考】java.util.loggingをApache log4jにリダイレクト
難易度が高いが、メリットも大きい「ログ」

 今回はログの常識について、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

 Index
第10回 入門から実践までJavaで学べる「ログ」の常識
Page1
いまさら聞けない「ログファイル」とは何か?
ロギングを行うための標準Java API
  Page2
【入門1】はじめてのロギング
【入門2】info以外のメソッドも使うには?
  Page3
【入門3】ログファイルにログを出力するには?
  Page4
【実践】開発現場におけるロギングの実際
【参考】java.util.loggingをApache log4jにリダイレクト
難易度が高いが、メリットも大きい「ログ」






Java Solution全記事一覧



ホワイトペーパーTechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています