본문 바로가기
Server

Tomcat log를 날짜별로 분할하자. (그리고 catalina.out 안녕!)

by 모닝위즈 2024. 12. 2.
반응형

 

먼저 `rotatelogs`를 활용하기 위해 아래 명령어로 rotatelogs의 위치를 확인하자.

[root@localhost tomcat]# whereis rotatelogs
rotatelogs: /usr/local/apache/bin/rotatelogs

 

그런 다음. 

catalina.sh 파일에 간다. 

그리고 대략 478번 Line 쯤에 아래 부분을 주석처리한다.

touch "$CATALINA_OUT" 

-> #touch "$CATALINA_OUT"

그리고 내용이 없으면 에러가 나므로, 

echo "no touch CATALINA_OUT" 라는 문구라도 찍는다. 

그러면 Tomcat 실행 시 해당 문구를 볼 수 있다^^

 

그리고 아래쪽(대략 500번 Line쯤)으로 좀 내려가다가 보면 

echo "Using Security Manager" 아래 부분에 

org.apache.catalina.startup.Bootstrap "$@" start \ 가 보이는데 이 부분에 

org.apache.catalina.startup.Bootstrap "$@" start  2>&1\ 이렇게 수정을 한다. 백그라운드로 돌아가라~라는 뜻.

 

그 아래 해당 내용을 추가한다.

| /usr/local/apache/bin/rotatelogs /home/apache_log/tomcat/catalina.%Y-%m-%d.log 86400 540 & 

 

그리고, 해당 라인 아래에 

>> "$CATALINA_OUT" 2>&1 "&" 를 주석 처리한다..

#>> "$CATALINA_OUT" 2>&1 "&"

'

510번 Line 쯤에도 마찬가지로 똑같이 해준다. 

 

그러면 총 정리되는 부분은 아래와 같다.

 

  shift
  if [ -z "$CATALINA_OUT_CMD" ] ; then
    #touch "$CATALINA_OUT"
    echo "no touch CATALINA_OUT"
  else
    if [ ! -e "$CATALINA_OUT" ]; then
      if ! mkfifo "$CATALINA_OUT"; then
        echo "cannot create named pipe $CATALINA_OUT. Start aborted."
        exit 1
      fi
    elif [ ! -p "$CATALINA_OUT" ]; then
      echo "$CATALINA_OUT exists and is not a named pipe. Start aborted."
      exit 1
    fi
    $CATALINA_OUT_CMD <"$CATALINA_OUT" &
  fi
  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
      -D$ENDORSED_PROP="\"$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\
      | /usr/local/apache/bin/rotatelogs /home/apache_log/tomcat/catalina.%Y-%m-%d.log 86400 540 & 
      #>> "$CATALINA_OUT" 2>&1 "&"

  else
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
      -D$ENDORSED_PROP="\"$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\
      | /usr/local/apache/bin/rotatelogs /home/apache_log/tomcat/catalina.%Y-%m-%d.log 86400 540 & 
      #>> "$CATALINA_OUT" 2>&1 "&"

  fi

 

 

 

자 이대로 실행하면 될까?

 

`logging.properties`에 의해 제대로 기록되지가 않는다.

 

그러면 logging.properties파일의 이름을 변경해줘서 기능을 못하도록 막으면 된다.

 

logging.properties -> logging.properties_bak

 

 

자 이 설정까지 끝났으면 tomcat을 재기동해준다. 

 

그러면 이제 더이상 catalina.out을 생성하지 않고 날짜별 로그에 바로바로 기록된다. 

 

 

카타리나 Ban

댓글