
プログラマーの常識をJavaで身につける (10)
入門から実践までJavaで学べる「ログ」の常識
株式会社 NTTデータ ビジネスブレインズ
伊賀敏樹
2008/1/10
本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます(編集部注:Java言語の基礎を学びたい読者は、連載「Eclipseではじめるプログラミング」や連載「いまから始めるJava」をご参照ください)。
今回はログの常識について、Java言語を通じて学んでいきます。多くの場合、ログは「ログファイル」という物理的なファイルに関連付けられて、私たちの前に現れます。
前回のプロパティの記事と同様、プログラム内では完結せず、外部の物理ファイルとのかかわりが出てくるため、初心者のうちはなかなかなじみにくい技術であるかもしれません。しかし、プログラミングにおいて重要ですので、しっかり習得してしまいましょう。
前回紹介したプロパティでは、プロパティファイルからの設定情報の読み込みが話題の中心であったのに対し、ログはログファイルへの書き込みが話題の中心となります。入力から出力へと話題が変わるのです。
いまさら聞けない「ログファイル」とは何か?
皆さんがOSやアプリケーションなどを利用していると、ファイル拡張子が「.log」のファイルを見掛けたり、あるいはその内容を確認することがあるかと思います。多くの場合、この拡張子のファイルがログファイルです。
■ ログファイルの種類
ログファイルはさまざまな種類のプログラムから出力されます。その出力形式もログファイルによってさまざまです。単純なテキスト形式のログファイルもあれば、XML形式のログファイルなどもあります。
ログ1件の内容が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」のページ |
![]() |
| 図3 「Apache Commons Logging」のページ |
編集部注:Apache log4jやApache 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パッケージを使ったロギング・プログラミングを解説します。
| Index | ||||||||||
|
||||||||||
| Java Solution全記事一覧 |
ホワイトペーパー(TechTargetジャパン)
- Android NDKでJNIを使用してアプリを高速化するには (2010/3/17)
C/C++やOpenGL ESといったネイティブコードを使うためのNDKとJNIを紹介し、その使い方や注意点を徹底解説します - 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |









