📄 Tomcat Log 파일 종류 2018. 7. 31. 11:41

개요

로그 파일 분석 요청을 처리하던 중 생성원리 및 설정이 궁금해 정리한다.

1. Tomcat 에서 log를 기록하는 방식, JULI

Java 1.4 부터 java.util.logging이라는 java Logging Framework이 제공되었다. 여러 장점이 있는 반면에 JVM 레벨의 설정만 가능 하다는 단점이 있다. 즉, 웹 애플리케이션 단위로는 로그를 남길 수 없다는 것이다.

Tomcat 은 이러한 Java Logging 의 단점을 해결하기 위하여 Java Logging 을 확장한 JULI 라는 이름의 로그 관리를 사용하고 있다. 때때로 JULI 는 Java Logging 의 Tomcat 버전으로 표현되기도 하며, Java Logging 의 설정 방법과 기본적으로 동일하다. JULI 는 ${INSTANCE_DIR}/bin/tomcat-juli.jar 파일로 존재하고 있다.

2. logging.properties

log에 대한 설정을 담당한다. 파일은 다음 위치에 존재한다.

  • ${INSTANCE_DIR}/conf/logging.properties : Java Logging 에 대한 설정 파일. 이 파일 경로는 Tomcat 에 의하여 java.util.logging.config.file 이라는 JVM 시스템속성으로 정의되어 있다. (만일 이 속성이 없다면 default ${JAVA_HOME}/lib/logging.properties 를 사용하게 된다.)
  • WEB-INF/classes/logging.properties : 각 애플리케이션의 설정 파일. 애플리케이션 별로 달라질 수 있다. (애플리케이션 로그를 log4j로 관리하는 경우 lolog4j2.xml 파일이 WEB-INF/classes 폴더에 있음을 확인할 수 있다.)

logging.properties 에 대한 설정 옵션은 하단 링크 참고 Access 로그의 경우 JULI가 아닌 AccessLogValve 가 담당한다.

3. log 파일의 종류

log 파일은 별도의 설정이 없다면 ${INSTANCE_DIR}/logs 에 생성된다. 생성되는 로그 파일의 종류는 다음과 같다

  • catalina.out
  • catalina.yyyy-mm-dd.log
  • manager.yyyy-mm-dd
  • localhost_access_log.yyyy-mm-dd
  • localhost.yyyy-mm-dd
  • host-manager.yyyy-mm-dd

아래는 각 로그 파일에 대한 설명이다.

catalina.out

Tomcat 기동 시 ${INSTANCE_DIR}/bin/catalina.sh 에 의해 생성되는 로그 파일. 기본적으로 서버상 발생한 모든 내용을 기록 한다.

if [ -z "$CATALINA_OUT" ] ; then       *CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out*     fi     …     >> "$CATALINA_OUT" 2>&1 "&" 

위 소스는 catalina.sh 의 스크립트이며 기동시 Standard Output 과 Standard Error 모두를 ${CATALINA_OUT}으로 보내는 것을 확인 할 수 있다. ${CATALINA_OUT}은 ${CATALINA_BASE}/logs 하위에 catalina.out 파일의 위치를 의미한다.

catalina.out 은 Tomcat 이 기동되어 있는 동안에는 단 하나의 파일에 계속 내용이 추가된다. 즉, 별도의 설정이 없을 때 이 파일의 크기는 무한정 증가하게 된다. 날짜별로 생성시키거나, /dev/null 로 생성하지 않는 방법으로 관리할 수 있다.

catalina.out shutdown이 아닌 ServerDown 으로 종료(과부하로 인해 메모리 힙덤프를 남겼을때)시, Startup 시점에 덮어쓰기 되므로 주의한다.

catalina.yyyy-mm-dd.log

${INSTANCE_DIR}/conf/logging.properties 에 의하여 생성/제어 되는 로그 파일

Tomcat 에서 생성하는 로그만을 기록 한다. Tomcat System log라 할 수 있으며 Standard output, Standard error 의 로깅은 제외된다. (소스상 System.out.println 이나 System.err.println 으로 남기는 로그는 제외한다는 의미)

위 두 가지 로그만으로도 서버 모니터링이 가능하다. 운영시 다음 처럼 관리하는 것이 이상적이다.

  1. catalina.out 을 생성하지 않도록 catalina.sh 파일을 수정한다.
  2. Tomcat System log : catalina.yyyy-mm-dd.log 를 통해 모니터링
  3. Application log : FrameworkLog or Log4j 를 통해 데일로그로 운영

물론 위 상황은 이상적인 권고안일 뿐 catalina.out 을 데일리로 나누는 방법이 편할 수도 있다.

Access log (그외)

cilent의 Request를 기록하는 로그 파일이다. 접근브라우저 및 ip 등을 확인할 수 있다. Tomcat 배포 버전에 따라 이 AccessLogValve가 비활성화되어 있기도 하고, 활성화되어 있기도 하다. ${INSTANCE_DIR}/conf/server.xml 에서 활성화 여부를 확인할 수 있다.

참고자료

Apache Tomcat(톰캣) 로그에 대하여 (Java Logging과 JULI)

Tomcat 7.x와 8.x 간의 Default Configuration 비교

(이 블로그의 글은 내가 이해할 수 있는 수준에서 재정리한 것에 불과하므로 가능하면 꼭 원본글을 읽어보시기 바란다)

반응형

BELATED ARTICLES (관련글)

more