ラボ > FuelPHP:エラー絡み

fuelphpで簡易にログ保存

エラー以外でもログ出力させたい

作成日:2018-02-22, 更新日:2018-04-26

基本

「APPPATH . 'logs/'」の下に保存させる場合。

▼適当な場所に記載

public static function saveLog($body='', $prms=array()) {
   $filename = (isset($prms['filename']))? $prms['filename']: 'log';
   $path = APPPATH . 'logs/' . $filename . date('Ymd') . '.txt';
   
   $str = date('Y-m-d H:i:s') . "\n"
        . $body
        . "\n";
   
   file_put_contents($path, $str, FILE_APPEND | LOCK_EX);
}

▼適当なトコから呼び出し

$body = 〇〇〇;
$prms = array(
   'filename' => 〇〇〇,
);
\〇〇〇::saveLog($body, $prms);

サンプル

・呼び出し元もログに出力したい(※「debug_backtrace()」を利用)
・年月のディレクトリ内にファイルを作成したい(※「is_dir()」と「mkdir()」を利用)

▼「app/classes/util/log.php」

<?php
class Util_Common_Log {
   
   /** ディレクトリが無ければ作る **/
   public static function makeDir($dir){
      $parts = explode('/', $dir);
      $dir = '';
      foreach($parts as $part) {
         if(!is_dir($dir .= "/$part")) {
            mkdir($dir);
         }
      }
   }
   
   /** 呼び出し元情報 **/
   public static function getLastFunction($aryBackTrace=false) {
      $strBackTrace = '';
      if ( is_array($aryBackTrace) ) {
         $strBackTrace .= ( (!isset($aryBackTrace[0]['file']))? 'file - unknown, ':       $aryBackTrace[0]['file']       )
                        . ( (!isset($aryBackTrace[0]['line']))? 'line - unknown, ': '(' . $aryBackTrace[0]['line'] . ')' )
                        . '';
      }
      
      return $strBackTrace;
   }
   
   /** ログ保存 **/
   public static function save($body='', $prms=array()) {
      
      // アクセス元IP
      $remoteAddr = '';
      if ( isset($_SERVER["REMOTE_ADDR"]) ) {
         $remoteAddr .= $_SERVER["REMOTE_ADDR"];
      }
      else {
         $remoteAddr .= 'unknown';
      }
      
      // 呼び出し元(バックトレース)
      $strBackTrace = self::getLastFunction(debug_backtrace());
      
      $dir = APPPATH . 'logs/' . date('Y') . '/' . date('m');
      self::makeDir($dir);
      
      $filename = (isset($prms['filename']))? $prms['filename']: 'log_';
      $path = $dir . '/' . $filename . date('d') . '.txt';
      
      $str = "\n"
           . '==== ==== ====' . "\n"
           . date('Y-m-d H:i:s') . ' / ' . 'REMOTE_ADDR:' . $remoteAddr   . "\n"
           . 'BACK_TRACE = ' . $strBackTrace . "\n"
           . 'BODY       = ' . $body         . "\n"
           . '';
      
      file_put_contents($path, $str, FILE_APPEND | LOCK_EX);
   }
}