
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|実行成功ログ出力テスト
