안녕하세요~~ 저희는 공공의 적 팀입니다~~<(*^.^*)/
이번에는 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이 어렵다.
'OS > Linux' 카테고리의 다른 글
편리한 로그 수집을 위한 Apache Log4j 소개 (0) | 2022.07.17 |
---|---|
[Linux] 리눅스 패키지 비교 (1) (0) | 2022.07.14 |
[Linux] ssh 접속 (0) | 2022.06.24 |
리눅스 레드마인(Redmine) 설치 방법 (0) | 2022.06.15 |
Crontab과 Logrotate를 활용한 로그 순환 (0) | 2022.06.10 |
댓글