作成日: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); } }