programing

오류 및 경고를 파일에 기록하려면 어떻게 해야 합니까?

sourcejob 2022. 11. 23. 20:13
반응형

오류 및 경고를 파일에 기록하려면 어떻게 해야 합니까?

스크립트 내에서 모든 오류와 경고를 설정하고 파일에 기록하려면 어떻게 해야 합니까(ppp.ini에서는 아무것도 변경하지 않음)?

파일 이름을 정의하고 모든 오류와 경고가 로그인되도록 합니다.

다음 코드를 사용합니다.

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );

그런 다음 파일을 봅니다.

tail -f /tmp/php-error.log

또는 업데이트php.ini2008년 블로그 엔트리에 기재되어 있습니다.

  • error_log - 오류 메시지를 어딘가에 보냅니다.

error_log("You messed up!", 3, "/var/tmp/my-errors.log");

오류나 경고 또는 로그가 필요할 때마다 이 함수를 호출하도록 자체 오류 핸들러를 사용하여 오류 처리를 사용자 정의할 수 있습니다.자세한 내용은 PHP 매뉴얼의 오류 처리 장을 참조하십시오.

다음 코드를 PHP/인덱스 파일 상단에 넣기만 하면 됩니다.

error_reporting(E_ALL); // Error/Exception engine, always use E_ALL

ini_set('ignore_repeated_errors', TRUE); // always use TRUE

ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment

ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path

이 코드를 .htaccess 파일에 추가합니다(php.ini 파일 또는 ini_set 함수 대신).

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>
  • 코멘트: Apache 타입의 서버용이며, Nginx 의 서버용이 아닙니다.

그건 내 개인적인 짧은 기능이야

# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty

mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}

php.ini의 설정 옵션을 확인합니다.하고 싶은 대로 하는 것 같아요.로그 파일을 직접 설정하는 옵션도 사용할 수 있다고 생각합니다.

언제?log_errors디렉티브가 로 설정되어 있다.OnPHP에 의해 보고된 오류는 서버 로그 또는 지정한 파일에 기록됩니다.error_log필요에 따라서, 이러한 옵션을 로 설정할 수도 있습니다.

(주의해 주세요.display_errors이 옵션이 활성화 되어 있는 경우 php.ini에서 비활성화해야 합니다.)

또, 이 조작을 실시하려면 , 「AllowOverride Options」지시가 필요합니다.(Apache 2.2.15).

로그 기능은 다음과 같습니다.

로그 행을 편집하여 편집할 수 있습니다.$maxLogs=5로그 쓰기 순서도 지정합니다.$logOrder='top'

<?php
lg('script start','start');

#Code......
lg('script end','End of code');

function lg($str,$mod='Your Log Category'){
    $ts = microtime(true);
    if(!defined('logTimer')){
        define('logTimer',microtime(true));
    }
    $diff=abs(round(($ts-logTimer)*1000,2));
    $maxLogs=5;
    $logOrder='top';#new Logs at top
    
    
    $filename = './log.txt';
    $log=[];
    if(!file_exists($filename)){
        if(!file_put_contents($filename,json_encode($log,128))){
            echo "Can’t open to write '$filename' Check Permissions";
            return;
        }
    }else{
        $c=file_get_contents($filename);
        if(trim($c)==''){$c='[]';}
        
        $log =@json_decode($c,true);
        if(!is_Array($log)){$log=[];}
    }
    $new=['mod'=>$mod,'date'=> date('Y-m-d H:i:s')." Scripttime: ".$diff."ms",'log'=>$str];
    if($logOrder=='top'){
        array_unshift($log , $new);
        $log=array_slice($log,0,$maxLogs);
        }else{
        $log[]=$new;
        $log=array_slice($log,0-$maxLogs,$maxLogs);
    }
    
    
    $logs=json_encode($log,128);
    if(!file_put_contents($filename,$logs) ){echo ("Can’t open to write '$filename' Check Permissions") ;return;}
    return $str;
}
?>

출력은 다음과 같습니다.

[
    {
        "mod": "delete",
        "date": "2022-08-04 13:48:02 0.33ms",
        "log": "test 2"
    },
    {
        "mod": "start",
        "date": "2022-08-04 13:48:29 0ms",
        "log": "test"
    },
    {
        "mod": "delete",
        "date": "2022-08-04 13:48:29 0.27ms",
        "log": "test 2"
    },
    {
        "mod": "start",
        "date": "2022-08-04 13:48:34 0ms",
        "log": "test"
    },
    {
        "mod": "delete",
        "date": "2022-08-04 13:48:34 0.92ms",
        "log": "test 2"
    }
]

언급URL : https://stackoverflow.com/questions/3531703/how-do-i-log-errors-and-warnings-into-a-file

반응형