PHPでログをとる必要性
PHPプログラムを開発していく過程で、デバッグを行いますが、C言語、VBと違いトレースを行う環境を作りにくい現状。
また、実際の運用でも動作が問題なく完了してるか、エラーは発生してるかなどの履歴を残すことは重要です。
そこで、ログ用のスクリプトを用意してインクルードさえしておけば、いつでも簡単にログを残せます。
今回そのログ用PHPプログラムを作ります。
PHPでログ用プログラムを作る
基本的には、error_log関数を使用します。
ログの仕様
今回は用途に合わせて使い分け出来るように5系統のログをとれるようにします。
ログの内容は、1ログ = 1行で、行の始まりに年/月/日 時:分:秒.10mカウント|ログ内容にしました。
ログ用PHPプログラムソース
ソースコードは次のように
<?php // log001.php header('Content-Type: text/html; charset=UTF-8'); mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_http_input("UTF-8"); mb_http_output('UTF-8'); // ======================================================================= // log Utility // ソースファイル名(log001.php) // // Logファイルの設定 define("PRINT_LOGFILE", __DIR__."/log/process.log"); define("PRINT_LOGFILE1", __DIR__."/log/process1.log"); define("PRINT_LOGFILE2", __DIR__."/log/process2.log"); define("PRINT_LOGFILE3", __DIR__."/log/process3.log"); define("PRINT_LOGFILE4", __DIR__."/log/process4.log"); function logprint($msg) { error_log( get_mtimestamp()."|".$msg."\n", 3, PRINT_LOGFILE); } function logprint1($msg) { error_log( get_mtimestamp()."|".$msg."\n", 3, PRINT_LOGFILE1); } function logprint2($msg) { error_log( get_mtimestamp()."|".$msg."\n", 3, PRINT_LOGFILE2); } function logprint3($msg) { error_log( get_mtimestamp()."|".$msg."\n", 3, PRINT_LOGFILE3); } function logprint4($msg) { error_log( get_mtimestamp()."|".$msg."\n", 3, PRINT_LOGFILE4); } function get_mtimestamp() { $array_now = explode('.',microtime(true)); //日時+ミリ秒 return date('y/m/d H:i:s', $array_now[0]) . '.' . substr($array_now[1], 0, 2); } ?>
「Logファイルの設定」の部分で5系統分のログファイル名を設定しています。
ここでは、このPHPプログラムファイルがフォルダの直下に"log"と言うフォルダの中にファイルが作られます。
この"log"フォルダは、予め作ってあることが前提です。無いとエラーになります。
ログの先頭に付ける時刻は、「get_mtimestanp」関数を作り戻り値が時刻の文字列になっています。
データ量を減らすため年号は2桁で
「18/05/05 12:23:34.55」のような文字列を返します。
ログ用PHPプログラムの使い方
使い方は簡単、このログ用PHPプログラムをターゲットプログラムの先頭でインクルードしておいて、ログ関数を呼び出すだけです。
<?php // ターゲットプログラム header('Content-Type: text/html; charset=UTF-8'); mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_http_input("UTF-8"); mb_http_output('UTF-8'); require_once(__DIR__."/log001.php"); // ログ用プログラム $title = "ログ出力テスト"; $test = []; $test[] = true; $test[] = false; $test[] = true; foreach($test as $res){ if($res){ // 実行成功 logprint4("実行成功".$title); // ログ出力 } else{ // 実行失敗 logprint4("実行失敗".$title); // ログ出力 } } ?>
ログ出力結果
上の例のログ「/log/process4.log」の内容は
18/05/06 00:44:11.22|実行成功ログ出力テスト 18/05/06 00:44:11.56|実行失敗ログ出力テスト 18/05/06 00:44:12.15|実行成功ログ出力テスト