[ Python ] logging 결과물 폴더 생성 후 압축 파일로 저장하기

2019. 12. 9. 17:44분석 Python/구현 및 자료

728x90

도움이 되셨다면, 광고 한번만 눌러주세요.  블로그 관리에 큰 힘이 됩니다 ^^

 

파이썬에서 Logging을 하고 싶을 때가 있다. 
그냥 저장하는 것은 쉽지만, 그러다 보면, 용량을 과하게 차지하니 압축을 해서 저장을 하고 싶어 진다.

그리고 이것을 언제 저장했는지 구별하고 싶어서 압축 시점 날짜 폴더를 생성 후 그 안에 압축 파일을 넣어야 했다.

기존 방식으로는 안됬기 때문에 먼가 수정이 필요했다. 그리고 정답까지는 아니겠지만, 이런 식으로 하니 문제를 해결할 수 있었다

여기서는 분 단위로 저장하게 했다. 

import logging
import gzip, zlib
import os
from datetime import datetime as dt

def namer(name) :
    return name + ".gz"
    
def rotator(source , dest ) :
    split = dest.split("/")
    dir_ = "/".join( split[:-1] )
    dest_dir = os.path.join( dir_, dt.now().strftime("%Y-%m"))
    if not os.path.exists(dest_dir) : os.makedirs(dest_dir)
    else : pass
    dest =\
    os.path.join( dest_dir , dt.now().strftime("%m-%d-%Y-%H%M") + "-" + split[-1] )
    print(f"compressing {source} -> {dest}")
    with open(source , "rb") as sf :
        data = sf.read()
        compressed = zlib.compress(data, 9 )
    with open(dest , "wb" ) as df :
        df.write(compressed)
    os.remove(source)
        
        
log = logging.getLogger("test")
log.setLevel(logging.DEBUG)
FileHandler = logging.handlers.RotatingFileHandler(
    filename = "./filelog.txt" , 
    mode ="w",
    backupCount = 5 ,
    maxBytes = 10 , 
    encoding="utf-8"
)
FileHandler.setLevel(logging.DEBUG)
FileHandler.rotator = rotator
FileHandler.namer= namer 
log.addHandler(FileHandler) 
for i in range(100) :
    log.debug("hi")

728x90