본문 바로가기
OS/Linux

Tomcat 일자별 로그 순환 및 삭제 (catalina.out)

by BTC_JYP 2022. 7. 1.

안녕하세요~~ 저희는 공공의 적 팀입니다~~<(*^.^*)/ 


이번에는 Tomcat에 대한 로그 순환에 대해 정리해보고자 합니다.

 

Tomcat의 로그는 Apache 로그와는 달리 다양한 로그가 쌓이게 됩니다.

 

 - catalina.out : server 기동 및 정지, 서비스 개시 및 정지, standard ouput, standard error의 정보 기록

 

 - catalina.YYYY-MM-DD.log : catalina.out에서 stdout, stderr를 제외한 정보 기록 (가상호스트 매니저)

 

 - host-manager.YYYY-MM-DD.log : Tomcat Manager Web App 로그 (가상호스트 매니저)

 

 - manager.YYYY-MM-DD.log : Tomcat Manager Web App 로그 (웹 콘솔)

 

 - localhost.YYYY-MM-DD.log : host(⩳VirtualHost) 한정 로그

 

 - localhost_access_log.YYYY-MM-DD.txt : tomcat에 액세스한 기록 (host의 요청 일시와 방식)

 

이 중에서 특히 catalina.out은 다른 로그와 달리 기본적으로 일자별 분류가 되지않기에 덮어두고 사용하다보면 GB단위로 용량을 잡아먹게 됩니다.

 

이전에 소개해드린 crontab과 logroatate를 이용한 Apache 로그 순환에 대해 소개를 한 적이 있는데, tomcat의 catalina.out 역시 이와 동일한 방법으로 로그 순환을 시킬 수 있으나 이번에는 rotatelogs를 사용한 일자별 로그 저장 방법을 소개해드리고자 합니다.


rotatelogs

 - Apache사의 로그 순환을 위한 프로그램

 

사용 형식

rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]

 

옵션

 - -l
순환주기로 GMT 대신 지역시간을 사용한다. (BST나 DST와 같이) GMT 시간차가 변하는 환경에서 -l을 사용하면 예기치 않은 결과가 발생할 수 있다.


 - logfile
로그파일의 경로와 이름. logfile에 '%' 문자가 있다면 strftime(3)의 형식문자열과 같이 처리한다. '%' 문자가 없다면 뒤에 초단위 시간 .nnnnnnnnnn을 자동으로 붙인다. 두 형식 모두 현재 기간부터 시작시간을 계산한다.


 - rotationtime
로그파일을 순환할 초단위 시간.


 - offset
UTC에서 분단위 시간차이. 생략하면 0으로 가정하여 UTC를 사용한다. 예를 들어, UTC -5 시간대의 지역시간을 사용한다면 아규먼트로 -300을 지정한다.


 - filesizeM
시간이 아닌 크기를 지정할때 메가바이트단위 최대 파일크기 뒤에 M을 붙인다. rotationtime과 offset 대신 이 파라미터를 사용한다.

 

형식 문자열 표현

%A (지역화된) 완전한 요일 이름
%a (지역화된) 3-문자 요일 이름
%B (지역화된) 완전한 달 이름
%b (지역화된) 3-문자 달 이름
%c (지역화된) 날짜와 시간
%d 2-자리 일
%H 2-자리 시간 (24 시간 시계)
%I 2-자리 시간 (12 시간 시계)
%j 3-자리 날짜수
%M 2-자리 분
%m 2-자리 달
%p (지역화된) 12 시간 시계의 am/pm
%S 2-자리 초
%U 2-자리 주일수 (주의 첫번재 날은 일요일)
%W 2-자리 주일수 (주의 첫번재 날은 월요일)
%w 1-자리 요일수 (주의 첫번째 날은 일요일)
%X (지역화된) 시간
%x (지역화된) 날짜
%Y 4-자리 연도
%y 2-자리 연도
%Z 시간대 이름
%% 문자그대로 `%'

위쪽의 rotatelogs를 이용해 tomcat catalina.out의 로그를 순환시켜보자.

 

${CATALINA_HOME}/bin/catalina.sh에서 

 

touch "$CATALINA_OUT"

 부분은 주석으로 처리하고,

 

>> "$CATALINA_OUT" 2>&1 "&"

                               ↓

2>&1" \| [rotatelogs location] $CATALINA_OUT.%Y-%m-%d.log 86400 540 &

 

이러한 형식으로 변경하면, 아래와 같이 일자별로 로그가 쌓이게 된다.

 

감사합니다.

 

↓ 더보기 ↓

더보기

logging.properties 

 - JDK에서 기본적으로 제공하는 Logging 클래스

해당 설정 파일에서는 로그 레벨 및 저장 위치 등을 지정할 수 있다.

 

xxx.org.apache.juli.AsyncFileHandler.level 부분에서 로그 레벨을 지정

 - ALL : 모든 메시지의 로그

 - SEVERE : 중대한 장해를 나타내는 메시지 레벨 (최고치)

 - WARNING : 잠재적인 문제를 나타내는 메시지 레벨

 - INFO : 정보로서 제공하는 메시지 레벨

 - CONFIG : 정적인 구성 메세지의 메시지 레벨

 - FINE : 트레이스 정보를 제공하는 메시지 레벨

 - FINER : 상세한 트레이스 메시지 레벨

 - FINEST : 극히 상세한 트레이스 메시지 레벨 (최저치)

 - OFF : 로그를 오프로 하기 위해서 사용 가능한 특수 레벨

 

※ 로그 레벨을 낮추면 그만큼 로그가 쌓이지 않아 용량 문제는 해결할 수 있겠지만, 장애같은 이슈 발생 시 로그를 명확히 확인할 수 없어 Trouble Shooting이 어렵다.

댓글