본문 바로가기
Tomcat

[Tomcat] catalina.out 로그 관리

by jn4624 2021. 3. 3.
반응형

1. 로그를 관리하지 않으면 발생하는 문제점

톰캣 실행으로 발생하는 모든 로그는 catalina.out에 기본으로 기록된다.

catalina.out을 관리하지 않으면 로그는 계속해서 쌓이고 용량은 계속 늘어나 여러 문제가 발생할 수 있다.

 

2. catalina.out에 로그 기록하지 않는 방법

- /bin 디렉토리 안에 catalina.sh 파일에 설정

 

a. 원본

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
 

b. 수정본

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 "&"
  >> /dev/null 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 "&"
  >> /dev/null 2>&1 &

fi

위와 같이

  • touch "$CATALINA_OUT" 부분은 주석처리
  • >> "$CATALINA_OUT" 2>&1 "&" 부분은 >> /dev/null 2>&1 &으로

수정하면 서버 상태 로그만 catalina.yyyy-mm-dd.log 파일에 기록되고 catalina.out에는 로그가 기록되지 않는다.

 

※ 주의사항

 

프로그램 실행과정에서 발생하는 어떠한 로그도 catalina.out에 기록되지 않기 때문에 log4j 등 프로그램에서 발생하는 로그를 기록하려면 별도의 작업이 필요하다.

 

3. catalina.out 날짜별로 저장하는 방법

  • touch "$CATALINA_OUT" 부분은 주석처리
  • >> "$CATALINA_OUT" 2>&1 "&" 부분은 >> "$CATALINA_OUT".$(date '+%Y-%m-%d') 2>&1 "&"으로

수정하면 catalina.out.yyyy-mm-dd 형식으로 매일 하나씩 생성, 저장된다.

 

a. 수정본

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 "&"
  >> "$CATALINA_OUT".$(date '+%Y-%m-%d') 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 "&"
  >> "$CATALINA_OUT".$(date '+%Y-%m-%d') 2>&1 "&"

fi

 

4. logrotate 사용하여 관리하는 방법

- logrotate 설정은 /etc/logrotate.d 디렉토리 안에 별도의 설정 파일을 만들어 저장.

 

  • 1. /etc/logrotate.d 디렉토리로 이동
  • 2. tomcat 파일 생성
  • 3. 생성된 tomcat 파일에 환경설정 내용 작성

 

a. 형식

catalina.out이 생성될 경로 {

---- 환경설정 옵션 정보 ----

}

/data/tomcat/logs/catalina.out {
    copytruncate
    compress
    daily
    rotate 14
    missingok
    notifempty
    dateext
}
옵션 정보
copytruncate 기존 파일을 복사한 후 기존 파일 부분 내용 삭제
이 옵션을 넣지 않으면 맨 처음 로그가 생성된 파일에 계속해서 로그가 쌓이게 됨
compress 로그 파일 압축해서 생성
.gzip 확장자로 생성되는데 vim 데이터를 이요하면 압축을 해제해서 읽기, 수정이 가능
daily 하루 단위로 로그파일 생성
rotate  날짜를 지정하면
지정한 날짜만큼 지난 로그 파일을 모두 삭제
missingok 로그 파일이 생성되지 않는 경우에 에러를 발생시키지 않음
notifempty 로그로 기록할 내용이 없을 때는
신규 로그 파일을 생성하지 않음
dateext 파일명에 날짜를 넣어서 생성

 

b. 제대로 적용되는지 확인하기 위해 아래 명령어 입력

$ sudo logrotate -f /etc/logrotate.d/tomcat

위 명령어를 실행하면 강제로 logrotate를 한번 실행하게 되며 catalina.out-yyyy-mm-dd 파일이 생성된다.

이제 하루에 한번씩 logrotate가 실행되면서 catalina.out 파일이 날짜별로 생성되고 오래된 로그 파일은 알아서 삭제된다.

 

 

🙏 참조 ::

반응형