logrotate 돈 뒤부터 app.log는 0바이트고 app.log.1만 계속 커집니다
조회 2 · 댓글 0
지난번 nginx 뒤 스프링부트 502 질문 올렸던 서버와 같은 환경입니다. Ubuntu 22.04, OpenJDK 17, Spring Boot 3.2에 logback으로 파일 로그를 남기고 있고, 로그 로테이션은 앱 자체 롤링 없이 시스템 logrotate로 돌리고 있습니다.
증상은 이렇습니다. 매일 새벽 logrotate가 돌고 나면 그 뒤로 app.log 파일 크기가 0으로 멈춰 있습니다. 반면 직전에 돌려 만들어진 app.log.1 쪽이 계속 커집니다. 실시간 로그 보려고 app.log를 tail -f 걸어두면 아무것도 안 올라오는데, app.log.1을 tail하면 현재 요청 로그가 그쪽에 찍히고 있습니다. 앱을 재시작하면 그 순간부터 다시 app.log에 정상으로 쌓이다가, 다음 로테이션이 돌면 또 같은 상태가 됩니다.
lsof로 보니 자바 프로세스가 app.log.1 (deleted 아님)을 열고 있는 걸로 나옵니다.
$ ls -l /var/log/myapp/
-rw-r--r-- 1 app app 0 Nov 13 03:00 app.log
-rw-r--r-- 1 app app 48213774 Nov 13 11:42 app.log.1
$ sudo lsof -p 12345 | grep app.log
java 12345 app 41w REG 259,1 48213774 ... /var/log/myapp/app.log.1logrotate 설정은 이렇습니다.
/var/log/myapp/*.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
create 0644 app app
}logback은 그냥 FileAppender로 /var/log/myapp/app.log 한 곳에 쓰도록만 해둔 상태입니다. logrotate -d로 돌려봐도 설정 문법 에러는 없고, 로테이션 자체는 정상으로 되는 것처럼 보입니다. 왜 로테이션 후에 앱이 새 파일이 아니라 옛날 파일에 계속 쓰는 건지, 이 구성에서 어떻게 잡아야 하는지 조언 부탁드립니다.
로그인 후 답글을 남길 수 있습니다.