PHP 超簡単にログをとる

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