
プログラマーの常識をJavaで身につける (10)
入門から実践までJavaで学べる「ログ」の常識
株式会社 NTTデータ ビジネスブレインズ
伊賀敏樹
2008/1/10
【実践】開発現場におけるロギングの実際
ここまでは、ロギングAPIやプロパティファイルをどのように利用すればログが出力されるのか、について説明してきました。
ここからは、ロギングに関するプログラミングを実際に行う際の話題について、簡単にお伝えします。
■ ログのフォーマットを変更
現実的なログファイルでは、ログのフォーマットを変更したくなったり、あるいはログのフォーマットが決められている場合があります。
このような場合には、下記のようにjava.util.logging.Formatterクラスを継承したフォーマッタクラスを作成してフォーマットを変更します。
formatメソッドの内容を以下のように変更して、ログ1件がテキストファイル上の1行で表現されるように変更してみましょう。
| MyLogFormatter.java | |
|
作成したログフォーマッタクラスを利用するようにするため、javalog.propertiesプロパティファイルを下記のように変更します。
| javalog.propertiesファイル(作成したログフォーマッタクラスを利用する設定例) | |
|
この状態でSampleLogging5クラスを実行すると、以下のように標準エラー出力へのログ出力のフォーマットが変わっていることが確認できます。
実行結果(コンソール出力) |
| 2007-11-19 14:14:05.672 CONFIG SampleLogging - ログ設定: LogManagerを設定しました。 2007-11-19 14:14:05.813 FINEST SampleLogging - 隣の客はよく柿食う客だ。 2007-11-19 14:14:05.813 FINER SampleLogging - 東京都特許許可局。 2007-11-19 14:14:05.813 FINE SampleLogging - かえるぴょこぴょこ。 2007-11-19 14:14:05.813 CONFIG SampleLogging - 庭には二羽鶏が。 2007-11-19 14:14:05.813 INFO SampleLogging - 生麦生米生卵。 2007-11-19 14:14:05.813 WARN SampleLogging - あかまきがみ。 2007-11-19 14:14:05.813 SEVERE SampleLogging - すもももももももものうち。 |
■ 「追跡」をするトレースログを無効化するには?
プログラム動作の状況や結果を追跡する目的でロギングされたログを「トレースログ」と呼びます。Eclipseの統合開発環境などを用いた対話的なデバッグが利用できない場合などに、よくトレースログを活用します。
一般的には、トレースログは 通常利用時には出力しないようにすることがほとんどです。このため、FINE、FINER、FINESTレベルのいずれかを利用してロギングされることになります。そして現実的には、FINESTレベルを利用するのが無難なことでしょう。
さらに、トレースログは一般的に大量に出力されます。この大量のトレースログの処理が実行性能を引き下げてしまうことがあります。このような状況を防ぐために、トレースログは定数を利用した条件分岐などを利用して完全に無効化してしまう場合もあります。
定数を用いた無効化を利用すると、再コンパイルを実施しないとロギングの有効化・無効化を切り替えることができなくなりますが、性能低下を避けるために、どうしてもその対応が必要となる場合があります。
定数を利用した条件分岐を用いたトレースログの無効化の例を以下に示します。
|
■ ログレベルの使い分け
実際のロギング・プログラミングでは、ログレベルの使い分けが難易度の高いものの1つになる場合が多いです。どのような場合にどのログレベルを利用するのかについて、注意が必要となってくるのです。
もし、あなたが何かのソフトウェア開発プロジェクトの一員であるのなら、そのプロジェクトで決められたログレベルの運用ルールに従う必要があります。ログレベルは 全体的な統一感をもって運用される必要があるからです。
一般的には、ソフトウェア開発が一段落した後、ソフトウェア運用の際に適用されるログレベルはINFO、WARNING、SEVEREレベルなどになると考えます。場合によっては CONFIGレベルも含まれることがあるでしょう。オンライン処理とバッチ処理でログ出力指針が異なってくることもあります。
架空のプロジェクトにおけるログレベル指針を参考までに示します。
| 表2 ログレベル指針の例 | ||||||||||||||
|
ログとは難しいもので、大量にロギングすると嫌がられる一方で、必要な情報をロギングしないと非難されてしまいます。特に、INFO、WARNING、SEVEREについては、必要十分なロギングを行う必要が出てきます。実際にログファイルに出力されたログを見て、初めてどのようにロギングすべきかについての判断が可能となる場合もあります。
【参考】java.util.loggingをApache log4jにリダイレクト |
||
参考までに、筆者が現在取り組んでいる「blancoLog」というjava.util.loggingへのログ出力をApache log4jにリダイレクトするためのオープンソース・ユーティリティを紹介させていただきます。
この記事でも紹介したように、原稿執筆時点(2007年12月)においては、多くの場合ロギングのインターフェイスとしてApache Commons Loggingを利用することが多いように思います。 ところが、Apache Commons Loggingを利用すると、Javaソースコードにorg.apache.commons.logging.*のimport文が必要になってしまいます。「ロギングはしておきたいのだけれども、Javaのimport文に標準Java API以外のものが入るのは好ましくない」というジレンマを感じている方は多いように考えます。 一方で、Apache log4jのノウハウは多くたまっており、Apache log4jもしくはApache Commons Loggingのインターフェイスを利用せざるを得ないという状況があることも確かです。 これを解決するために、blancoLogというオープンソースのユーティリティの開発に取り組んでいます。具体的には、java.util.logging.Handlerクラスを継承したクラスを作成し、ログ出力をApache log4jクラスへとリダイレクトしてしまうというものです。 つまりは、java.util.loggingをApache Commons Loggingの代わりに使ってしまおうとする取り組みです。Java標準APIのみを利用し、かつApache log4jのロギングを利用してしまおうとするのです。 取り組み始めたばかりのオープンソースですが、ご興味を感じられましたら、試用されることをお勧めしたく思います。 |
編集部注:blancoLogを含むblanco Framework全体について詳しく知りたい読者は特集記事「Excelからプログラムを作る多言語対応オープンソース」をご参照ください。
難易度が高いが、メリットも大きい「ログ」
ログやログファイル、そしてログを扱うAPIを用いたプログラミングについて紹介してきましたが、どういうものなのかお分かりいただけましたでしょうか。
冒頭で紹介したように、ログに関するプログラミングは初心者にとっては少し難易度の高いものとなります。これに加えて、ログファイルに関する常識や、さらにはログファイルに関する運用などの面を考慮する必要が出てくると、より一層難易度の高いものになってしまいます。
その一方で、ロギングを行うことにより、各種情報をプログラムの外へと伝達できるメリットもかなり大きなものなのです。ぜひログファイルを扱う技術を身に付けて、活用できるようになっていきましょう!
■ @IT関連記事
- Java TIPS 「Adapterパターンを使い利用コンポーネントを切り替える」
- Java TIPS 「アクセスログ記録のロジックをフィルタで一元化する」
- Java TIPS 「Strutsのアクションマッピングに独自パラメータを追加」
| 【実録ドキュメント】そのログ本当に必要ですか? 現場から学ぶWebアプリ開発のトラブルハック(3) 数人での利用時は動きが早かったシステムでユーザー数が増えると急激に遅くなる現象が発生! 何が起きたんだ!? 「Java
Solution」フォーラム 2007/5/24 |
||
| 正規表現の入力・テストをするプラグイン CoolなEclipseプラグイン(5) 正規表現の入力とテスト、ログ出力コードの入力支援、プロパティファイルの入力支援をする3種類のプラグインを紹介する 「Java
Solution」フォーラム 2005/7/21 |
||
| Index | ||||||||||
|
||||||||||
| プロフィール |
| 伊賀 敏樹(いが としき) ハンドル:いがぴょん 1968年生まれ。現在、NTTデータ ビジネスブレインズ 第一SI事業部 ソリューショングループ所属。システム開発の技術支援などに従事する。仕事におけるJava言語とのかかわりは1998年から。
現在 blanco Frameworkというオープンソースによるソースコード自動生成タイプの開発フレームワーク提供に取り組んでいる。
趣味はヴァイオリン演奏。アマチュアオーケストラで演奏することもある。ホームページ いがぴょんの日記ウェブページv2(1996年から続けているWeb日記) 所属団体 blanco Framework(コミッタ) 主な著書 「やさしく学ぶ基礎からのJDBC」 「Javaプログラミング[アプリケーション編]ステップアップラーニング」 |
| ご意見、ご感想はJava Solution 会議室へどうぞ |
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


