Open Source Web Development Tutorials - Dev Shed
PHPでログ機能を作ろう
(2009/02/13公開)
ログ作成機能のないアプリケーション?
筆者は最近、とある製品開発を引き継いだ。そのコード自体は約2年前のものだったのだが、なんとその製品にはログ作成のメカニズムが付いていなかったのだ。そのことを知りショックを受けると共に戦慄(せんりつ)を覚えた。この記事では筆者がなぜそれほど驚いたかを説明するとともに、PHPアプリケーションにおいてログ作成機能を実装する方法を紹介しよう。
ログ作成のメカニズムがないならば、開発環境で何らかのミスが発生した場合、何が原因であったのかさっぱり見当も付かないようになる。このような場合にサポート担当の開発者ができることといえば、起きた問題を開発者サイドから再現してみることだけだ。この方法は必ずしも成功するとは限らない。
PHP環境であるLAMPの場合、多くの個所でログが自動的に出力されている。Apacheは独自のログを作り、PHP自身もログを作る。MySQLも同様だ。エラーが発生した時など、これらのログから多くの情報を得ることができる。ただ、これらのログの問題は、それらがサーバー依存であるということで、アプリケーションごとに特定して作成されるのではない、ということだ。つまり、それぞれのアプリケーションに関する有用な情報は何も記録してくれない。
アプリケーションのレベルでログは極めて重要であり、ごくごくささいに思えるアプリケーションでもログ作成機能は実装されるべきだ。アプリケーションログが重要だといえるもっとも根本的な理由には、開発途中でのデバッグ、開発環境でのトラブルシューティング、統計を取ることやセキュリティー上の抜け穴を埋めることなどをあげることができる。
基本的にいって、アプリケーションログには以下の種類がある。
1.トレースログ
トレースログはトラブルシューティングのためのもので、どのページのどの行から何がいつ実行されたかの「足あと」が残されている。つまり、トレースログは開発者向けのもので、技術的な性質を持っているといえよう。例として以下のようなものがある。
02:49:06 05/07/08 [critical] 1210108746 Could not create instance with dsn mysql://:@/ C:xampphtdocsicore4includeISms.class.php 43 superadmin
この一例では、ログの値の順序は:サーバー時刻、日付、優先度、タイムスタンプ、ログメッセージ、行ファイル名、番号、そして発行したユーザー名、となっている。
2.監査ログ
監査ログは、ユーザーのログインとログアウトの記録を納めている。つまり、セキュリティー違反を防ぐ助けになる。
3.ユーザーログ/履歴
ユーザーログはエンドユーザーによって利用されるものだ。 トラブルシューティングのためのものではなく、たいていの場合優先度も記載されていない。アプリケーションの履歴として働くものだ。この種類のログは技術的過ぎるものであってはならない。一例は以下のとおり:
02:49:06 05/07/08 A new user who was created by superadmin
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.








