리눅스에서 작동되는 톰캣(Tomcat) 9 환경에서의 톰캣 로그에 관한 정보를 정리한다.
# 톰캣 로그 종류
1. catalina.out
– 리눅스에서 톰캣을 실행할 때 console 출력을 기록한다. standard output, standard error에 기록된 모든 내용
– 설정 : catalina.sh, logging.properties
2. catalina.YYYY-MM-DD.log
– 톰캣에서 생기는 로그만을 기록한다. 서버의 기동, 정지, 서비스의 개시, 정지 정보
– 설정 : logging.properties
3. host-manager.YYYY-MM-DD.log
– Tomcat Host Manager Web app 로그 (가상호스트매니저)
– 설정 : logging.properties
4. manager.YYYY-MM-DD.log
– Tomcat Manager Web App 로그 (웹콘솔)
– 설정 : logging.properties
5. localhost.YYYY-MM-DD.log
– host( VirtualHost 같은) 한정한 로그
– 설정 : logging.properties
6. localhost_access_log.YYYY-MM-DD.txt
– 톰캣에 액세스한 기록. 어느 host에서 언제, 어떤 방식으로 요청했는지 기록
– 설정 : server.xml
# catalina.out 로그 로테이션
위의 톰캣 로그 종류 중 catalina.out 는 다른 로그와는 달리 날짜별로 분리되지 않는다. 따라서 필요에 따라 이를 날짜별로 분리하는 과정이 필요할 수 있다.
1. logrotate 데몬으로 로그 로테이션
– /etc/logrotate.d/ 에 관련 설정 파일을 생성한다. 예를 들면 /etc/logrotate.d/tomcat-9
- 위의 tomcat-9 파일에 다음의 내용처럼 상황에 맞게 설정한다.
vi /etc/logrotate.d/tomcat-9
/{PATH_TO_CATALINA_LOG_FILE}/catalina.out {
copytruncate
daily
rotate 30
compress
missingok
}
copytruncate : 기존 파일을 다른 파일로 복사하고 기존 파일의 내용은 지워버림
daily : 매일 로그 파일을 로테이션
rotate 30 : 로그 파일을 30일 유지 (daily 인 경우)
compress : 지나간 로그파일들을 gzip으로 압축
missingok : 로그파일이 없더라도 오류를 발생시키지 않음
2. shell과 crontab을 사용
– 가칭 rotatelog.sh 작성
#!/bin/sh
cp /{PATH_TO_TOMCAT_LOG_FILE}/catalina.out /{PATH_TO_TOMCAT_LOG_FILE}/catalina.out.$(date +%Y-%m-%d) 2>&1
cat /dev/null > /{PATH_TO_TOMCAT_LOG_FILE}/catalina.out
– 매일 밤 11시 59분에 실행하도록 crontab에 등록
59 23 * * * /{PATH_TO_SHELL}/rotatelog.sh
# catalina.out 로그 비활성화
권장하지는 않지만 어떤 이유로 catalina.out 로깅을 중지할 필요가 있다. 백업을 받은 후 다음과 같이 수정하면 된다.
catalina.sh 파일의 수정
…
if [ -z “$CATALINA_OUT” ] ; then
CATALINA_OUT=”$CATALINA_BASE”/logs/catalina.out
fi
…
을 다음과 같이 수정한다.
…
if [ -z “$CATALINA_OUT” ] ; then
CATALINA_OUT=/dev/null
fi
…
CATALINA_OUT=/dev/null 로 설정하면 톰캣은 로그를 /dev/null 로 보내도록 설정된다. /dev/null 은 모든 데이터를 버리는 특수한 파일로, 마치 블랙홀처럼 데이터를 흡수하여 사라지게 한다. 따라서 로그 데이터가 실제로 저장되지 않고 버려지게 되어 로그 생성이 비활성화되는 효과를 얻을 수 있다.
# 로그 파일 경로 변경
톰캣의 로그는 기본적으로 ${catalina.base}/logs 디렉토리에 저장된다. 이를 /fslog/myapp 디렉토리로 수정
1. catalina.out
– ${catalina.base}/bin/catalina.sh 수정
…
if [ -z “$CATALINA_OUT” ] ; then
CATALINA_OUT=/fslog/myapp/catalina.out
fi
…
2. catalina.YYYY-MM-DD.log, host-manager.YYYY-MM-DD.log, manager.YYYY-MM-DD.log, localhost.YYYY-MM-DD.log
– ${catalina.base}/conf/logging.properties 수정
…
1catalina.org.apache.juli.AsyncFileHandler.directory = /fslog/myapp
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
…2localhost.org.apache.juli.AsyncFileHandler.directory = /fslog/myapp
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
…3manager.org.apache.juli.AsyncFileHandler.directory = /fslog/myapp
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
…4host-manager.org.apache.juli.AsyncFileHandler.directory = /fslog/myapp
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
…
3. localhost_access_log.YYYY-MM-DD.txt
– ${catalina.base}/conf/server.xml 수정
…
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”/fsapp/myapp”
prefix=”localhost_access_log” suffix=”.txt”
pattern=”%h %l %u %t “%r” %s %b” />
…
# Access Log 의 maxDays 설정 추가
server.xml 에 설정이 있는 Access 로그는 maxDays(보관일수)가 기본값 -1로 “삭제하지 않음”으로 되어 있다. 다른 로그들과 같이 90일로 바꿔보자.
logging.properties 에 있는 다른 로그들은 기본값 90일로 설정되어 있다.
…
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
…
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
…
3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
…
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90
…
server.xml 에 있는 Access 로그 부분에 maxDays 속성을 추가한다.
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”localhost_access_log” suffix=”.txt”
pattern=”%h %l %u %t "%r" %s %b” maxDays=”90″ />
안녕하세요~
항상 경제 지표 잘 보고 있습니다. 감사합니다^^
풋-콧?(cpce)? 이 지표도 올려주실수 없을까요?
아니면 어디서 찾아야하는지 알수 있을까요?
부탁드립니다~
CPCE가 무엇인지….
미국 풋콜 비율은 http://yellow.kr/financeView.jsp?s=$CPC 에 있습니다.