phpで簡易ログ出力
単純にログを出力する場合はerror_logを使う。
若干詳細にログをとる場合はこんな感じに関数を定義する
<?php function access_logger($str){ $datetime = date( "Y/m/d (D) H:i:s", time() );//日時 $client_ip = $_SERVER["REMOTE_ADDR"];//クライアントのIP $request_url = $_SERVER["REQUEST_URI"];//アクセスしたURL $msg = "[{$datetime}][logger][client {$client_ip}][url {$request_url}]{$str}"; error_log($msg."\n", 3, "/var/log/php/access.log"); }
改造の余地(思いついたことや調べてたこと)をメモ
- ログレベル等をつけるたい
- phpのエラーレベルを参考に
エラーレベル | 内容 |
---|---|
E_ERROR | 重大な実行時エラー。これは、メモリ確保に関する問題のように復帰できないエラーを示します。スクリプトの実行は中断されます。 |
E_WARNING | 実行時の警告(致命的なエラーではない)。スクリプトの実行は中断されません。 |
E_PARSE | コンパイル時のパースエラー。パースエラーはパーサでのみ生成されます。 |
E_NOTICE | 実行時の警告。エラーを発しうる状況に遭遇したことを示す。ただし通常のスクリプト実行の場合にもこの警告を発することがありうる。 |
E_CORE_ERROR | PHPの初期始動時点での致命的なエラー。E_ERRORに似ているがPHPのコアによって発行される点が違う。 |
E_CORE_WARNING | (致命的ではない)警告。PHPの初期始動時に発生する。E_WARNINGに似ているがPHPのコアによって発行される点が違う。 |
E_COMPILE_ERROR | コンパイル時の致命的なエラー。E_ERRORに似ているがZendスクリプティングエンジンによって発行される点が違う。 |
E_COMPILE_WARNING | コンパイル時の警告(致命的ではない)。E_WARNINGに似ているがZendスクリプティングエンジンによって発行される点が違う。 |
E_USER_ERROR | ユーザーによって発行されるエラーメッセージ。E_ERRORに似ているがPHPコード上でtrigger_error()関数を使用した場合に発行される点が違う。 |
E_USER_WARNING | ユーザーによって発行される警告メッセージ。E_WARNINGに似ているがPHPコード上でtrigger_error()関数を使用した場合に発行される点が違う。 |
E_USER_NOTICE | ユーザーによって発行される注意メッセージ。E_NOTICEにに似ているがPHPコード上でtrigger_error()関数を使用した場合に発行される点が違う。 |
E_STRICT | コードの相互運用性や互換性を維持するためにPHPがコードの変更を提案する。 |
E_RECOVERABLE_ERROR | キャッチできる致命的なエラー。危険なエラーが発生したが、エンジンが不安定な状態になるほどではないことを表す。ユーザ定義のハンドラでエラーがキャッチされなかった場合(set_error_handler()も参照ください)は、E_ERRORとして異常終了する。 |
E_DEPRECATED | 実行時の注意。これを有効にすると、将来のバージョンで動作しなくなるコードについての警告を受け取ることができる。 |
E_USER_DEPRECATED | ユーザ定義の警告メッセージ。これはE_DEPRECATEDと同等だが、PHPのコード上で関数trigger_error()によって作成されるという点が異なる。 |
-
- rubyのLoggerを参考に
エラーレベル | 内容 |
---|---|
FATAL | プログラムをクラッシュさせるような制御不可能なエラー |
ERROR | エラー |
WARN | 警告 |
INFO | 一般的な情報 |
DEBUG | 低レベルの情報 |
- 改行を含むログの場合は配列に変換してからインデントを整えて出力
- explodeで配列に変換してarray_walk で編集する
- $_GETや$_POSTや$_SERVERのログも取る
- print_r($_GET,True)とか