ラボ > FuelPHP:独自クラス:classes/utilのサンプル

FuelPHPでログを出力させる独自クラスのベース

作成日:2018-03-05, 更新日:2018-03-05

サンプルソース

基本、たたき台なので、必要に応じて修正する。

・アクセス元のIPと最後の呼び出し元を追加でログに含めたい。
・指定なければ「app/logs/年/月」に保存。

<?php
class Util_Log {
  
  /** ディレクトリが無ければ作る **/
  public static function makeDir($makeDir, $rootPath){
    $parts = explode(DIRECTORY_SEPARATOR, str_replace($rootPath, '', $makeDir));
    
    $dir = $rootPath;
    foreach($parts as $part) {
      if(!is_dir($dir .= DIRECTORY_SEPARATOR . $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());
    
    $rootPath = (isset($prms['rootPath']))? $prms['rootPath']: APPPATH;
    
    if (isset($prms['logPath'])) {
      $logPath = $prms['logPath'];
    }
    else {
      $logPath = 'logs' . DIRECTORY_SEPARATOR . date('Y') . DIRECTORY_SEPARATOR . date('m');
    }
    
    $dir = $rootPath . $logPath;
    
    self::makeDir($dir, $rootPath);
    
    $filename = (isset($prms['filename']))? $prms['filename']: 'log_';
    $path = $dir . DIRECTORY_SEPARATOR . $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);
  }
}