-
1. Code
7일 주기로 로그를 삭제하는 python코드입니다.
import logging import datetime import os class logManager: dirPath = "C:\AppDirctory\log" # 경로에 해당하는 file이 없을 경우 생성함 #AppDirctory file이 없으면 AppDirctory와 log file까지 생성해줌 if not os.path.isdir(dirPath): os.makedirs(dirPath) #현재 시간을 저장 dateInfo = datetime.datetime.now() #dirPath 경로에 있는 모든 file의 name을 불러옴 filelist = os.listdir(dirPath) #오래된 로그 file 삭제 로직 for i in range(len(filelist)): #날짜 비교를 위해 day 필터링 fileDate = filelist[i][-10:-4] #정해진 format과 다를 경우 continue if fileDate.isdecimal == False: continue #현재 시간에서 y,m,d만 추출 fileDateInfo = datetime.datetime.strptime(fileDate,"%y%m%d") #7일이상 차이가 날 경우 if ((dateInfo - fileDateInfo).days)> 7 : #해당 경로의 파일을 delfile = dirPath + "\\" + str(filelist[i]) #삭제 os.remove(delfile) #logging.basicConfig format값 logFormat = '%(asctime)s %(name)s %(levelname)s %(message)s' #파일 이름 logFileName = dirPath + "\log_{}.log".format(dateInfo.today().strftime("%y%m%d")) try : logging.basicConfig(filename = logFileName, filemode = "a", format = logFormat, level = logging.DEBUG) #log file이 없을때는 새로 만들고 열어야 함 except : f = open(logFileName,'w') f.close logging.basicConfig(filename = logFileName, filemode = "a", format = logFormat, level = logging.DEBUG) logger = logging.getLogger(__name__) def writeError(self,s): self.logger.error(": " + s) def writeDebug(self,s): self.logger.debug(": " + s) lm = logManager() lm.writeDebug("debug") lm.writeError("error")
2. 여담
사실 logging 모듈과 os 모듈에 대한 설명이 google에 너무 잘나와있어서 기능을 만드는데는 어려움이 없었지만, 오래된 파일들을 삭제하는 로직에서 날짜를 계산하는 로직에서 고민을 많이했었습니다.
파일을 읽어 year를 제외한 month과 day을 추출하여 계산할때 4/30 일의 파일이 5/7에 삭제가 되게 하려면 단순히 현재의 day와 파일의 day를 비교하여 삭제할 수는 없고 month가 넘어갈때도 체크해야하고 그러다보면 각달마다 몇일까지 있는지도 저장이 필요하겠다라는 생각을 했었는데요.
몇번 시도끝에 google에 파이썬 날짜 비교라는 키워드로 검색을 하니 string으로 변환할 필요 없이 datetime 모듈끼리의 연산을 하면 계산을 해준다고 하네요.
아래는 사용된 모듈들의 공식 문서입니다.
logging
https://docs.python.org/ko/3/howto/logging.html
os
https://docs.python.org/ko/3/library/os.html
datetime
https://docs.python.org/ko/3/library/datetime.html
'Lang > python' 카테고리의 다른 글
could not be resolved from sourve Pylance (0) 2022.03.01 댓글