장애를 찾으려고 로그를 봤다. 파일이 비어 있었다. 코드에는 logger.info()가 있었다.
Table of contents
Open Table of contents
어디까지 남았나
Tomcat 6의 catalina.out에는 서버 자체 로그만 있었다. 우리가 남긴 것은 한 줄도 없었다.
콘솔에 이런 줄이 떠 있었다.
log4j:WARN No appenders could be found for logger (com.example.UserService).
log4j:WARN Please initialize the log4j system properly.
설정 파일이 클래스패스에 없었다
log4j.properties가 프로젝트 루트에 있었다. WEB-INF/classes 아래에는 없었다. 빌드할 때 복사되지 않았다.
log4j는 클래스패스에서 log4j.properties나 log4j.xml을 찾는다. 웹 애플리케이션이면 WEB-INF/classes 아래다. 못 찾으면 경고만 남긴다.
코드가 있는 것과 도는 것은 다르다. 개별 logger는 appender가 없으면 root logger 것을 물려받는데, 설정 자체가 없으니 root에도 없었다.
src 아래로 옮기니 Ant 빌드가 WEB-INF/classes로 함께 복사해 로그가 남았다.
수준을 정하는 기준을 세웠다
전부 info로 남겨 파일이 하루 수백 MB였다. 필요한 것을 찾기 어려웠다.
기준을 정했다. error·warn·info·debug 넷이다. 사람이 봐야 하는 것, 이상하지만 도는 것, 요청 흐름, 값 확인용이다.
운영은 info, 개발은 debug로 두고 log4j.properties의 log4j.rootLogger에서 갈랐다.
파일 관리와 개인정보
ConsoleAppender를 DailyRollingFileAppender로 바꿨다. 날짜별로 파일이 갈린다.
Java 코드에서 전화번호가 그대로 찍히는 자리가 셋 있었다. 뒷자리를 가렸다. 이미 쌓인 파일은 그냥 두었다.
정리
No appenders could be found경고는 설정 파일을 못 찾았다는 뜻이다- log4j는 클래스패스에서
log4j.properties를 찾고, 웹은WEB-INF/classes다 - 프로젝트 루트에 두면
WEB-INF/classes로 복사되지 않는다 - 코드가 있다는 것과 그것이 도는 것은 다르다
- 전부
info로 남기면 정작 필요한 것을 못 찾는다 error·warn·info·debug의 기준을 정하고 환경별로 갈랐다DailyRollingFileAppender로 날짜별로 파일을 나눴다- 이미 쌓인 로그의 개인정보는 어떻게 할지 아직 모른다