본문 바로가기
프로그래밍 툴/기타

[톰캣] Tomcat 서버 로그(log)파일인 catalina.out을 날짜별로 생성되도록 수정하기

by 우림 2017. 11. 15.

지금 하고 있는 프로젝트의 WAS가 원래는 웹스피어였는데

무슨 영업적인 문제인지 경제성 때문인지는 모르겠지만 급하게 Tomcat으로 변경되었습니다.


서버담당자가 따로 없어서 제가 톰캣을 설치하고 잘 운영하고 있는데

문제는... 톰캣 log 파일인 catalina.out 파일이 한없이 커지고 있다는거죠.



벌써 10.5GB를 돌파했네요.

운영을 하면서 오류나 문제가 생기면 로그파일을 확인해서 문제를 해결하곤 하는데

이 로그파일이 너무 크다보니 문제가 생긴 부분을 찾는 것도 힘들어 지더군요.

그리고, catalina.out 파일이 100GB가 넘어가면 톰캣이 멈출 수 있다고 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  shift
  #touch "$CATALINA_OUT"
  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    eval $_NOHUP "\"$_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 \
      | /home/IBM/HTTPServer/bin/rotatelogs "$CATALINA_OUT".%Y-%m-%d 86400 540 &
      >> "$CATALINA_OUT" 2>&1 "&"
 
  else
    eval $_NOHUP "\"$_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 \
      | /home/IBM/HTTPServer/bin/rotatelogs "$CATALINA_OUT".%Y-%m-%d 86400 540 &
      >> "$CATALINA_OUT" 2>&1 "&"
 
  fi
cs


그래서, 부랴부랴 위처럼 catalina.out 파일이 날짜별로 생성되도록 수정을 했습니다.

/톰캣서버/bin/catalina.sh 파일을 찾아서 "touch"로 검색을 하면 위와 같은 부분이 나오는데...

 | /home/IBM/HTTPServer/bin/rotatelogs "$CATALINA_OUT".%Y-%m-%d 86400 540 &

이 부분을 추가해 주시면 됩니다.


아파치 서버의 기본 기능인 rotatelogs라는 걸 활용하는건데

문제는 rotatelogs의 설치 위치를 찾아서 그 경로를 적어줘야 한다는거죠.


즉, 위 소스에서 /home/IBM/HTTPServer/bin/rotatelogs 이 경로는 제가 사용하는 서버의 rotatelogs 위치구요.

각 서버의 rotatelogs의 위치를 찾아서 바꿔줘야 합니다.


find / -name rotatelogs

root 권한으로 위 명령어를 실행하면 rotatelogs의 위치를 찾을 수 있으니 참고하세요.


댓글