Tomcat을 JSVC로 구동 시 catalina.out 파일로 계속 로그가 쌓이게 된다.
이문제를 해결하기 위해 인터넷을 찾아본 결과 리눅스의 logrotate 명령을 이용해
쉽게 해결이 될 수 있었다.

먼저, logrotate 는 cron에 의해 구동되는데 설정파일의 위치는
/etc/logrotate.conf에 있으며
개개의 설정은 /etc/logrotate.d/ 디렉토리 안에서 정의된 파일을 처리하는 방식이다.

# 추가 생성
[root@host ~]# vi /etc/logrotate.d/tomcat
/usr/local/tomcat/logs/catalina.out {
        notifempty
        missingok
        rotate 30
        daily
        copytruncate
        dateext
        postrotate
                /bin/chown tomcat:tomcat /usr/local/tomcat/logs/catalina.out-*
        endscript
}
:wq
[root@host ~]#
# 실행 test
[root@host ~]# logrotate -f /etc/logrotate.d/tomcat
[root@host ~]# ls -l /usr/local/tomcat/logs


notifempty              -  log 파일의 내용이 비어 있는 경우 순환을 하지 않음.
missingok              -  만약 파일이 존재하지 않더라도 무시하고 진행
rotate count           -  rotate 순환주기를 설정할 수 있으며 곧 저장하고자 하는 파일의 개수를 의미
daily                     -  매일 logrotate를 실행
copytruncate          -  이 옵션을 쓰지 않으면 기존의 맨처음 로그가 생성된 파일에 계속해서 로그가 쌓이게 된다.
                                이러한 원인은 톰캣의 로그가 System.err 객체나 System.out을 사용하기 때문에
                                시스템의 raw디바이스로 출력이 되어 파이프를 타지 않기 때문이란다.
                                따라서 원래 로그를 다른이름으로 저장하고 새로운 catalina.out을 생성한다해도
                                실제 로그 스트림은 다른이름으로 지정된 원래 로그쪽으로 계속해서 쌓이게 된단다.
                                이걸 방지하기 위해 현재 로그내용을 복사하여 백업본으로 저장한후
                                원본 로그의 내용을 비우는 방식으로 저장해야 하도록 한다.
dateext                   -  날짜 형식을 붙여 로그 파일을 저장한다.
postrotate/endscript - logrotate를 실행한 후에 취하고자 하는 액션을 정의

2010/04/22 18:45 2010/04/22 18:45

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

Comment on this post!