手軽にデータを記録(ログ)する機能を追加する

フレームワーク

PHPの案件でシステム開発する場面でリリースする瞬間は緊張するものです。

特にリリース直後にプログラムの不具合によるデータの消失は非常に恐ろしく絶対にあってはならないものです。

また、他社のAPIサービスを利用する場面でのリクエストやレスポンスの情報を確認する作業は時として骨の折れる作業です。

このような場面で、ログを取る行為は非常に有効な手段です。

ここではPHP案件において手軽にログが記録・管理できるライブラリをご紹介します。

ソースコード

<?php
class Logger {

  // ログファイルの保管場所
  const BASE_DIR = '/var/www/html/wordpress.takeho.com/log';

  public static function addRecord($name, $args, $prefix = false)
  {
    $current_year = date('Y');
    $current_date = date('Ymd');
    $current_timestamp = date('Y-m-d H:i:s');

    if (!is_dir(self::BASE_DIR . '/' . $current_year)) {
      mkdir(self::BASE_DIR . '/' . $current_year, 0777);
      chmod(self::BASE_DIR . '/' . $current_year, 0777);
    }

    $filename = $prefix == false 
                ? $current_date . '.log' 
                : $prefix . '-' . $current_date . '.log';

    $log_src = self::BASE_DIR . '/' . $current_year . '/' . $filename;

    $out = '['.$current_timestamp.']';
    if(is_array($args) || is_object($args)){
      $out .= '['.$name.'::' . print_r($args, true) . ']';
    }else {
      $out .= '['.$name.'::'.$args.']';
    }
    $out .= "\n";

    $handle = fopen($log_src, 'a+');
    flock($handle, LOCK_EX);
    fwrite($handle, $out);
    flock($handle, LOCK_UN);
    fclose($handle);

    return true;
  }

}

?>

使用方法

以下の環境にて説明します。

ライブラリファイル名Logger.php
ログファイル保管ディレクトリ/var/www/protected/log
プログラム実行ファイルindex.php

設定

ログファイル保管ディレクトリの設定

Logger.phpに、ログファイルのパスを設定します。

  const BASE_DIR = '/var/www/protected/log';

ログディレクトリのパーミッション確認

ログファイル保管ディレクトリが書込み可になっているか確認してください。

書き込み禁止の場合はターミナル上から以下のコマンドでパーミッションを更新します。

[yourname@xxx.xxx.xxx.xxx]# chmod 0777 /var/www/protected/log

ログを記録する

ログを記録する場合は予め Logger.phpを読み込み以下の関数を実行します。

index.php
<?php
require_once 'Logger.php';
$args = [
  'abc' => '123',
  'def' => [
      'a' => '東京',
      'b' => '神戸',
  ],
];
Logger::addRecord('TEST-LOG', $args, 'sample');
?>

上記、index.php を実行後、ログ保管ディレクトリに年のディレクトリが作成され、更にその中に、logファイルが生成されていれば成功です。

生成されたログファイル(sample-<生成年月日>.log)の中身は以下のような結果である事が確認できます。

[2019-12-24 01:07:28][TEST-LOG::Array
(
    [abc] => 123
    [def] => Array
        (
            [a] => 東京
            [b] => 神戸
        )

)
]

Logger::addRecordの説明

addRecordメソッドの引数は以下の内訳となります。

Logger::addRecord(第1引数, 第2引数, 第3引数);
第1引数名前記録するログの値に対する名称
第2引数記録する値 (配列・オブジェクト可)
第3引数プレフィックス指定時のみログファイル名にプレフィックス名を付けて記録



スポンサーリンク
フレームワーク
takehoをフォローする
スポンサーリンク
たけほのへなちょこ台帳

コメント

タイトルとURLをコピーしました