Tomcat의 로그파일중 catalina.out은 하나의 파일에 계속 로그가 누적됨으로
파일의 크기가 무지막지하게 커지는 현상을 볼수있다.
차후 파일의 크기가 일정크기를 벗어났을때 에러도 발생하기때문에 정기적으로 Tomcat을 내리고 삭제해주는 작업을 해야되는
불편함이 있어서 파일을 다른 로그처럼 날짜별로 생성하고 싶었다.
그래서 검색을 했더니 log4j나 몇가지 다른 방법으로 설정하는 방법이 존재하는거 같았다.
하지만 Apache의 rotatelogs를 이용하는게 제일 쉽고 간단해 보였다.
방법은 /Tomcat설치폴더/bin/catalina.sh 파일의 내용중
shift
touch "$CATALINA_OUT"
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shift
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
else
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
fi
이부분에서 몇가지 부분을 아래와 같이 변경한다.
shift
#touch "$CATALINA_OUT"
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shift
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
2>&1 "&" | /apache설치위치/bin/rotatelogs "$CATALINA_OUT"-%Y-%m-%d 86400 540 &
else
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
2>&1 "&" | /apache설치위치/bin/rotatelogs "$CATALINA_OUT"-%Y-%m-%d 86400 540 &fi
위의 빨간색 글자부분이 변경된 부분이다.
우선 touch "$CATALINA_OUT" 부분을 주석처리한다.
주석처리하지 않으면 아래와같이 파일크기가 0인 catalina.out 이라는 파일이 계속 생성되어 있는것을 볼수 있다.
그다음으로 Apache가 설치된 경로를 확인한다.
이는 날짜별 파일 생성을 위해 rotatelogs를 사용하는데 Apache의 설치경로 아래에 bin폴더에 존재하기 때문이다.
그리고 나서
>> "$CATALINA_OUT" 2>&1 "&"
부분이 두군데 있는데 두군데 모두를
2>&1 "&" | /apache설치위치/bin/rotatelogs "$CATALINA_OUT"-%Y-%m-%d 86400 540 &
로 변경해준다.
당연히 "apache설치위치"는 실제 위치를 기재해야된다.
그리고 뒷쪽의 옵션이 %Y-%m-%d 86400 540 이렇게 붙는데
%Y-%m-%d는 날짜 표현(상세 표현 방법은 아래 표 참조)
%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 | 시간대 이름 |
%% | 문자그대로 `%' |
86400는 로테이션 시간을 초단위로 표현 (86400은 24시간 즉 매일)
540은 표준시와 한국시간과의 시간차를 표현
이제 catalina.out 로그는 날짜별로 생성되어 진다.
아래 참고사이트에 가면 더 다양한 설정 방법 및 옵션을 확인 가능하다.
참고 사이트 : http://adminid.kr/unixlinux/102231
http://httpd.apache.org/docs/current/programs/rotatelogs.html