Apache Tomcat 로그(logging.properties) 설정
1. Apache Tomcat 로그에 대해서
Apache Tomcat 로그는 conf/logging.properties 에 정의되어 있는데, java.util.logging.ConsoleHandler 는 표준출력으로 내보내는 것이고, org.apache.juli.AsyncFileHandler 는 파일로 내보내는 것이다.
표준출력으로 나가는 로그는 logs/catalina.out 혹은 Linux 배포판의 패키지 시스템으로 Apache Tomcat을 설치했다면, /var/log/syslog (ubuntu) 나 /var/log/messages 에 쌓이게 된다.
logs/catalina.out
혹은 logs/catalina.${TODAY}.log
파일은
Apache Tomcat 에서 내보내는 중요한 메시지를 확인해야 하므로
에러 로그를 방치하거나 너무 많은 로그가 쌓이게 두면,
중요한 로그를 발견하기 어렵게 되는 경우가 있으므로,
이를 잘 관리할 필요가 있다.
2. 로그 파일을 분리하자
/var/log/syslog 파일에는 syslog 가 쌓여야 하고, logs/catalina.out 이나 logs/catalina.2023-06-26.log 같은 파일에는 Apache Tomcat 자체의 로그가 쌓여야 한다.
응용프로그램에서 내보내는 로그는 디버깅을 목적으로 한 것과 운영자가 들여다 볼 필요가 있는 것을 분리할 필요가 있다.
xdbc 의 경우 sql 이 정상적으로 실행되면, finer 로그를, SQLException 이 발생하면, severe 로그를 남긴다.
graha 도 비슷하게 Exception 이 발생한 경우 severe 로그를 남기고, 디버깅을 위한 것들은 config, finer 등으로 남긴다.
graha 도 finest 로 sql 로그를 남기는데, xdbc 를 사용하지 않는 경우에만 의미가 있다.
severe 로그는 개발자가 예상치 못했던 예외적인 상황에서 남겨진 것이고, 원인을 분석해서 어떤 조치를 해야 한다는 의미이다.
로그파일의 관리를 위해서 다음과 같은 로그를 추가할 것이다.
- 3graha_warning.org.apache.juli.AsyncFileHandler
- 4graha_finer.org.apache.juli.AsyncFileHandler
- 5xdbc_warning.org.apache.juli.AsyncFileHandler
- 6xdbc_finer.org.apache.juli.AsyncFileHandler
- 7realm.org.apache.juli.AsyncFileHandler
realm 인증을 사용하지 않는다면, 마지막 항목(7realm.org.apache.juli.AsyncFileHandler) 은 필요없다.
conf/logging.properties 파일의 handlers 항목은 다음과 같이 변경한다.
handlers = 1catalina.org.apache.juli.AsyncFileHandler, \ 2localhost.org.apache.juli.AsyncFileHandler, \ 3graha_warning.org.apache.juli.AsyncFileHandler, \ 4graha_finer.org.apache.juli.AsyncFileHandler, \ 5xdbc_warning.org.apache.juli.AsyncFileHandler, \ 6xdbc_finer.org.apache.juli.AsyncFileHandler, \ 7realm.org.apache.juli.AsyncFileHandler, \ java.util.logging.ConsoleHandler
3 ~ 7 을 추가하면 되고, 기존의 설정을 제거하는 것은 신중해야 한다.
conf/logging.properties 에 다음과 같은 항목을 추가한다.
3graha_warning.org.apache.juli.AsyncFileHandler.level = WARNING 3graha_warning.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 3graha_warning.org.apache.juli.AsyncFileHandler.prefix = graha.warning. 3graha_warning.org.apache.juli.AsyncFileHandler.maxDays = 90 4graha_finer.org.apache.juli.AsyncFileHandler.level = FINER 4graha_finer.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 4graha_finer.org.apache.juli.AsyncFileHandler.prefix = graha.fine. 4graha_finer.org.apache.juli.AsyncFileHandler.maxDays = 90 5xdbc_warning.org.apache.juli.AsyncFileHandler.level = WARNING 5xdbc_warning.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 5xdbc_warning.org.apache.juli.AsyncFileHandler.prefix = xdbc.warning. 5xdbc_warning.org.apache.juli.AsyncFileHandler.maxDays = 90 6xdbc_finer.org.apache.juli.AsyncFileHandler.level = FINER 6xdbc_finer.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 6xdbc_finer.org.apache.juli.AsyncFileHandler.prefix = xdbc.fine. 6xdbc_finer.org.apache.juli.AsyncFileHandler.maxDays = 90
kr.xdbc 와 kr.graha 로 시작하는 패키지에 적용하기 위해서 다음과 같은 항목을 추가한다.
kr.xdbc.level = FINER kr.xdbc.handlers = 5xdbc_warning.org.apache.juli.AsyncFileHandler, 6xdbc_finer.org.apache.juli.AsyncFileHandler kr.xdbc.useParentHandlers = false kr.graha.level = FINER kr.graha.handlers = 3graha_warning.org.apache.juli.AsyncFileHandler, 4graha_finer.org.apache.juli.AsyncFileHandler kr.graha.useParentHandlers = false
realm 을 사용하고, 디버깅을 위한 로그가 필요한 경우에 다음과 같은 설정도 추가할 수 있다.
7realm.org.apache.juli.AsyncFileHandler.level = FINEST 7realm.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 7realm.org.apache.juli.AsyncFileHandler.prefix = realm. 7realm.org.apache.juli.AsyncFileHandler.maxDays = 90 org.apache.catalina.realm.level = FINEST org.apache.catalina.realm.handlers = 7realm.org.apache.juli.AsyncFileHandler org.apache.catalina.realm.useParentHandlers = false org.apache.catalina.authenticator.level = FINEST org.apache.catalina.authenticator.handlers = 7realm.org.apache.juli.AsyncFileHandler org.apache.catalina.authenticator.useParentHandlers = false 7realm.org.apache.juli.AsyncFileHandler.bufferSize = -1