톰캣(Tomcat) 로그

리눅스에서 작동되는 톰캣(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 &quot;%r&quot; %s %b” maxDays=”90″ />

톰캣(Tomcat) 로그
Tagged on:     

2 thoughts on “톰캣(Tomcat) 로그

  • 2021년 12월 4일 at 4:45 오전
    Permalink

    안녕하세요~
    항상 경제 지표 잘 보고 있습니다. 감사합니다^^
    풋-콧?(cpce)? 이 지표도 올려주실수 없을까요?
    아니면 어디서 찾아야하는지 알수 있을까요?
    부탁드립니다~

    Reply

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.