開発するうえで調べたこと、知ったことを備忘録としてメモメモ!

<?php
/**
 * LOG
 */
// ログ出力先   ../tmp/logs/YYYYMM/error.YYYYMMDD.log
$myLogFileName = "error." . date('Ymd') . ".log";
$myLogDirName  = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'logs' . DIRECTORY_SEPARATOR . date('Ym');

define('MY_ERROR_LOG_PATH', $myLogDirName .DIRECTORY_SEPARATOR . $myLogFileName);

function myLog($msg, $level = "INFO") {
    // 出力先ディレクトリがなければ作る
    if (!file_exists (dirname(MY_ERROR_LOG_PATH))){
        mkdir(dirname(MY_ERROR_LOG_PATH), 0755, TRUE);
    }
    
    $fp = fopen(MY_ERROR_LOG_PATH, 'a');
    fwrite($fp, myLogFormat($msg."\n", $level));
    fclose($fp);
}

function myLogFormat($msg, $level) {
    $format = "[%s][%s] %s";
    $msg = sprintf($format, date("Y-m-d H:i:s"), $level, $msg);
    return $msg;

}


/**
 * Error Handler
 */
set_error_handler( 'myErrorHandler' );

function myErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) {

    $msg = null;
    switch($errno){
        case E_ERROR:             $level = "E_ERROR";             break;
        case E_WARNING:           $level = "E_WARNING";           break;
        case E_PARSE:             $level = "E_PARSE";             break;
        case E_NOTICE:            $level = "E_NOTICE";            break;
        case E_CORE_ERROR:        $level = "E_CORE_ERROR";        break;
        case E_CORE_WARNING:      $level = "E_CORE_WARNING";      break;
        case E_COMPILE_ERROR:     $level = "E_COMPILE_ERROR";     break;
        case E_COMPILE_WARNING:   $level = "E_COMPILE_WARNING";   break;
        case E_USER_ERROR:        $level = "E_USER_ERROR";        break;
        case E_USER_WARNING:      $level = "E_USER_WARNING";      break;
        case E_USER_NOTICE:       $level = "E_USER_NOTICE";       break;
        case E_STRICT:            $level = "E_STRICT";            break;
        case E_RECOVERABLE_ERROR: $level = "E_RECOVERABLE_ERROR"; break;
        case E_DEPRECATED:        $level = "E_DEPRECATED";        break;
        case E_USER_DEPRECATED:   $level = "E_USER_DEPRECATED";   break;
        default:
            $level = "ERROR";
            $msg = "Unknown error type: [$errno] $errstr";
            break;
        
    }
    if (is_null($msg)) $msg = $errstr;
    $msg = $msg . " in $errfile on line $errline";
    
    myLog($msg, $level);
    
    return false; //PHP自身のエラーハンドラも実行
}

/**
 * shutdown
 */
register_shutdown_function( 'myShutdownHandler' );

function myShutdownHandler() {
    if ($error = error_get_last()){
        switch($error['type']){
            case E_ERROR:
            case E_PARSE:
            case E_CORE_ERROR:
            case E_CORE_WARNING:
            case E_COMPILE_ERROR:
            case E_COMPILE_WARNING:
            myErrorHandler($error['type'], $error['message'], $error['file'], $error['line'], null);
            break;
        }
    }
}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます