Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
Tags
- js
- javascript
- 리눅스
- 자바스크립트
- redis + spring boot 함께
- Linux
- 엔티티 코드 치환
- select
- 초단위
- 제이쿼리
- 자바
- catalina.out
- insert
- mysql
- for문
- sftp
- architecture
- 톰캣
- jQuery
- Tomcat
- Docker Compose
- Entity Code 치환
- 정규식
- springboot+redis
- feignClient
- aws elasticache 활용
- 특수문자 치환
- 만들면서 배우는 클린 아키텍처
- Java
- docker 컨테이너로 띄우기
Archives
- Today
- Total
꾸준하게, 차근차근
[Tomcat] catalina.out 로그 관리 본문
반응형
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 파일이 날짜별로 생성되고 오래된 로그 파일은 알아서 삭제된다.
🙏 참조 ::
반응형
'Tomcat' 카테고리의 다른 글
[Tomcat] DATASOURCE(데이터베이스) 동적 속성 적용 (0) | 2021.04.29 |
---|---|
[Tomcat] catalina.out 초기화 (0) | 2021.03.03 |
[Tomcat] 같은 도메인 다른 포트 HTTP 세션 충돌 (0) | 2021.03.03 |