| |
제 목 : 헉! php 5.3.x에서 error log가 UTC 시간으로 남는다.
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2012.1.31(화)
작성일 : 2012.2.3(금) php 5.3.10 내용 추가
1월에 나온 php 5.3.9버전과 이후에 나온 5.3.10버전에서 error log를 남길 때 UTC기준으로 로그가 남는다.
로그 시간에 +9시간( 05:23:29 UTC이라면 14:23:29 )을 살펴봐야한다는 것은 여간 불편한게 아니다.
| |
[13-Jan-2012 13:51:51] ... 생략 ... <-- 5.3.8이하, 5.2.x 버전에서는 localtime기준으로 정상적으로 남는다.
[13-Jan-2012 05:23:29 UTC] ... 생략 ... <-- 5.3.9버전부터 UTC기준으로 로그가 남는다.
| |

1. 왜 UTC기준으로 로그가 남을까
main/main.c 소스를 살펴봤더니 error log의 날짜포맷이 변경되었다.
1) php 5.3.8 이하, 5.2.x버전 (5.3.8버전에서 588번째줄)
| |
error_time_str = php_format_date("d-M-Y H:i:s", 11, error_time, 1 TSRMLS_CC);
| |
2) php 5.3.9~5.3.10, 5.4 버전
5.3.9버전 기준으로 603번째줄을 보면 다음과 같이 되어 있다.
| |
error_time_str = php_format_date("d-M-Y H:i:s e", 13, error_time, 0 TSRMLS_CC);
| |
숫자 13은 날짜형식의 자리수이다. 날짜 형식에 e가 추가 되었는데 timezone을 말한다. UTC, GMC, Asia/Seoul 등을 의미한다. 여기까지는 문제가 없다. 그런데 '0 TSRMLS_CC'라고 표시되어 있다. 0이면 UTC이고, 1이면 localtime기준으로 시간을 표시한다. 따라서 localtime기준(우리 나라 시간)으로 로그를 남기고 싶다면 5.3.8이전 버전처럼 패치하고 설치해야 한다.
※ 티니(tini)가 php 5.3의 Revision Log를 살펴보니 이미 작년 11.25일에 위처럼 변경이 되어 있었다. 5.3.8은 작년 8월에 발표, 5.3.9은 올 1월에 발표.
http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3/main/main.c?revision=319823&view=markup
Fixed bug #60373 (Startup errors with log_errors on cause segfault).
* php 5.3.9~5.3.10 main.c 패치파일 (5.3.10에서 동일하게 사용가능)
직접 수정하기 귀찮으면 패치 파일 받아서 적용. php소스/main/ 디렉토리로 이동한 후 patch명령을 실행하면 된다.
| |
patch < php5_3_main.c.patch.txt
| |
2. php에서 error log를 남기려면
참고로 error log를 파일로 남길 때는 php.ini에서 다음과 같이 설정한다. 그리고 웹서버 데몬이 이 파일을 쓰기 가능하게 해준다.
| |
log_errors = On
error_log = /경로/로그 파일명
| |
|