728x90
소개
FileHandler 를 사용하면 로그파일은 크기가 제한없이 커지는데요.
로그 파일 회전을 지원하는 RotatingFileHandler 을 알아보겠습니다.
RotatingFileHandler
-
filename: 파일이름
-
mode: 쓰기 모드 (default: 'a')
-
maxBytes: 백업할 로그 파일의 최대 크기 (Bytes)
-
backupCount: 백업 로그 파일 개수
예제 1
다음 예제는 FileHandler 을 사용하여 로그파일 크기가 500 KB 까지 반복합니다.
import logging
import os
def loop():
i, file_size = 0, 0
while file_size < 500*1024: # 500 KB
file_size = os.path.getsize(log_file_path)
logger.debug(i)
i += 1
print(f'{file_size} Byte')
if __name__ == '__main__':
log_dir = 'log'
log_fname = 'debug.log'
if not os.path.exists(log_dir):
os.mkdir(log_dir)
logger = logging.getLogger('jvv')
logger.setLevel(logging.DEBUG)
log_file_path = os.path.join(log_dir, log_fname)
file_handler = logging.FileHandler(log_file_path)
formatter = logging.Formatter('[%(levelname)s] :: %(asctime)s :: %(module)s :: %(name)s :: %(message)s\n')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
loop()
512064 Byte
예제 2
백업파일 크기 1KB, 백업파일 개수 5개로 지정했습니다.
import logging
from logging.handlers import RotatingFileHandler
import os
def loop():
i = 0
while len(os.listdir(log_dir)) < 5:
logger.debug(i)
i += 1
for file in os.listdir(log_dir):
_path = os.path.join(log_dir, file)
_size = os.path.getsize(_path)
print(f'{file} size: {_size}')
if __name__ == '__main__':
log_dir = 'log'
log_fname = 'debug.log'
if not os.path.exists(log_dir):
os.mkdir(log_dir)
logger = logging.getLogger('jvv')
logger.setLevel(logging.DEBUG)
path = os.path.join(log_dir, log_fname)
rot_file_handler = RotatingFileHandler(path, mode='a', maxBytes=1024, backupCount=5)
formatter = logging.Formatter('[%(levelname)s] :: %(asctime)s :: %(module)s ::%(name)s :: %(message)s\n')
rot_file_handler.setFormatter(formatter)
logger.addHandler(rot_file_handler)
logger.debug('20200817')
loop()
debug.log size: 59
debug.log.1 size: 1003
debug.log.2 size: 1003
debug.log.3 size: 1003
debug.log.4 size: 999
다음과 같이 진행해보았습니다.
while i < 1000:
logger.debug(i)
i += 1
debug.log size: 960
debug.log.1 size: 1020
debug.log.2 size: 1020
debug.log.3 size: 1020
debug.log.4 size: 1020
debug.log.5 size: 1020
뒤로 밀면서 덮어쓰여지는 것을 확인할 수 있습니다.
참고
'Language > Python' 카테고리의 다른 글
파이썬 로깅( logging) 사용하기 -2 : Config 파일로 설정 (0) | 2020.08.16 |
---|---|
파이썬 동적 코드 실행(exec) : python exec not working in function (0) | 2020.08.16 |
파이썬 반복형 객체로 순서쌍 만들기 : itertools (0) | 2020.08.15 |
파이썬 단위테스트(unittest) 사용하기 -1 (0) | 2020.08.14 |
파이썬 로깅( logging) 사용하기 -1 : 출력 / 파일 / 포맷 (0) | 2020.08.14 |