오류 및 경고를 파일에 어떻게 기록합니까?


233

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

파일 이름을 정의하고 모든 오류와 경고가 파일에 기록되도록하고 싶습니다.

답변:


358

다음 코드를 사용하십시오.

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

그런 다음 파일을보십시오.

tail -f /tmp/php-error.log

또는 2008 년 부터이 블로그 항목에php.ini 설명 된대로 업데이트하십시오 .


41
ini_set해당 코드가 실행되는 경우에만 작동합니다. 코드가 실행 되기 전에 오류가 발생 하므로 구문 분석 오류 가있는 코드에는 유용하지 않습니다 . 대신 이러한 변경 사항을 php.ini에 작성하십시오.
hakre

9
php.ini를 편집 할 수 없다면, .htaccess에 이것을 추가 할 수 있어야합니다 : php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log. perishablepress.com/…
Matthieu

1
htdocs 폴더에 error.log 파일을 만드는 방법에 대한 질문이 있습니까?
Tommy

폴더 tmp/php-error.log를 원하는 위치에서 원하는 위치로 변경 한 것 같습니다 .
Luke

이것은 5.4.0에서 PHP와 충돌합니다
Supuhstar


42

다음 코드를 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

4
당신이 경우 그 단지의 또한 모든 오류 및 / 또는 브라우저에 출력에 표시 할 뿐만 아니라 로깅. display_errors라이브 프로덕션 서버에서 절대 켜지지 않아야합니다.이 지시문은 사용자에게 출력하기위한 것이며 로깅에는 영향을 미치지 않습니다. php.net/manual/en/…
Aaron Wallentine

22

이 코드를 .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>

* 논평 : 이것은 아파치 타입 서버를위한 것이며 Nginx 나 다른 서버를위한 것이 아닙니다 .


7
그러나 이것은 특히 Apache의 PHP 모듈과 관련이 있습니다.
SacredSkull

9

저의 개인적인 짧은 기능입니다

# 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);
}

6

log_errorsphp.ini 의 구성 옵션을 살펴보십시오 . 원하는대로하는 것 같습니다. error_log옵션을 사용하여 자체 로깅 파일을 설정할 수도 있다고 생각합니다 .

log_errors지시문이로 설정 되면 OnPHP가보고 한 모든 오류는 서버 로그 또는로 지정된 파일에 기록됩니다 error_log. ini_set필요한 경우 이러한 옵션을 설정할 수도 있습니다 .

( display_errors이 옵션이 활성화 된 경우 php.ini에서 비활성화해야합니다.)


1
display_errors활성화하면 왜 비활성화 해야 log_errors합니까? 내 의견으로는 이해가되지 않습니다. :)
Guido Hendriks

5
특히 오류 텍스트가 신중하게 파일에 로그인되어있는 경우 프로덕션 서버에서 오류 내용을 일반인에게 출력 할 필요가 없기 때문입니다.
Shabbyrobe

3
프로덕션 서버에서는 항상 디스플레이 오류를 비활성화해야합니다. 오류 로깅이 다른 곳에 구성되어 있지는 않지만 항상 그렇지는 않습니다. 기본적으로 오류는 아파치 오류 로그에 기록되는데, 이는 종종 충분합니다.
Pihhan

1
생산에 오류를 표시하면 : PHP가 더 인기가 있습니다
peterm는

0

또한이 기능을 사용하려면 "AllowOverride Options"지시문이 필요합니다. (아파치 2.2.15)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.