logrotate 사용해서 로그 일별분할 하기
파이썬 로거 사용에 대해서
기존의 python logger 의 경우 여러가지 handler 를 사용할 수 있는데, TimeRotatingFileHandler 를 이용했었다.
위와 같이 when="midnight" 설정을 하면 자정을 기해서, 로그가 분할되어진다. 또는 when="d" 로 설정할 경우 일할분할 되는데 이 경우, 실행시간을 기점으로 한다. 즉 오후 5시에 실행했으면 다음날 오후 5시에 로그가 끊어진다. midnight 설정시의 문제는 logger 의 실행여부인데, logger 가 해당 시간에 실행되고 있을때만 분할되어지는 문제점이 있다. 아래의 링크를 보면 보다 적절한 설명이 나와 있다.
http://stackoverflow.com/a/3497410/807540
logrotate 사용
위와 같이 설정을 하게 되면 지정된 파일에 계속 로그가 추가 된다. 그리고 나서 다음과 같이 logrotate.d에 다음과 같이 설정을 해준다.
그리고 나서 실행은 다음과 같이 실행한다.
실행 하게 되면, 지정한 web.log 내에 내용이 현재 날짜를 기준으로 새로운 파일로 만들어지게 된다. web.log-20151103 이런식으로 만들어지게 되고, web.log 는 비워지게 된다. 주기적으로 실행해야할 경우, cron.daily 에 등록해서 사용하면 된다.
logrodate의 옵션은 다음과 같다.
실행 옵션 | 설명 |
|---|---|
| -d, –debug | 디버그 모드 |
| -f, –force | 실행 강제하기 |
| -m, –mail | 메일링 로그일때 사용, 2개의 인자를 받는다. (제목, 받는사람) |
| -s, –state | 기본 상황파일인 /var/lib/logrotate.status 파일대신에 지정한 state파일을 사용한다. |
| –usages | 도움말 |
| –verbose |
conf 옵션 | 설명 |
|---|---|
| monthly | 월별 |
| daily | 일별 |
| weekly | 주별 |
| compress | rotate 된 로그 gzip 압축 |
| nocompress | 압축을 원치 않는다. |
| rotate count | 순환되는 파일들의 개수 |
| prerotate | logrotate작업 이전에 지정된 작업(스크립트)을 실행 |
| postrotate | logrotate작업 이후에 지정된 작업(스크립트)을 실행 |
| ifempty | 로그파일이 비어있는 경우에도 rotate(순환)을 하게된다. 기본값이다. |
| notifempty | ifempty와는 반대로 로그파일이 비어있을 경우에는 순환을 하지 않는다. |
| mail address | logrotate작업후에 이전로그파일을 지정된 메일주소로 메일을 보낸다. |
| size n | logrotate의 결과 순환된 결과 파일사이즈가 지정한 크기를 넘지 않도록 한다. 지정하는 방법은 100k, 100M등으로 용량단위를 붙여서 지정하면 된다. |
| missingok | 로그파일이 없더라도 오류를 발생시키지 않음. |
| dateext | 순환된 로그파일의 날짜 확장자 |
| copytruncate | 기존파일을 백업해서 다른 파일로 이동하고 기존 파일은 지원버리는 옵션 |
| errors | 에러가 발생하면 이메일로 통보한다. |
| nomail | 메일로 통보받지 않음. |
#dev
#logrotate
#로그 분할
#로그 일별 분할
#log
#로그