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