2021-01-22 Python TimedRotatingFileHandler가 접미사 수정 후 파일을 자동으로 삭제할 수 없음

Python TimedRotatingFileHandler가 접미사 수정 후 파일을 자동으로 삭제할 수 없음

TimedRotatingFileHandler 용도

“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight

1 초 동안 로그를 디자인하고 3 개 이상 삭제

	log = logging.getLogger()
	log.setLevel(logging.ERROR)  # 日志等级为ERROR
	
	fh = logging.handlers.TimedRotatingFileHandler("log", when='S', interval=1, backupCount=3)
	fh.suffix = "%Y-%m-%d_%H-%M-%S.log"
	formatter = logging.Formatter('[%(asctime)s] - %(filename)s [Line:%(lineno)d] - [%(levelname)s]-[thread:%(thread)s]-[process:%(process)s] - %(message)s') 
	fh.setFormatter(formatter)
	log.addHandler(fh)
	i = 0
	while i < 100000000:
	    sleep(0.1)
	    log.error("记录" + str(i))
	    i = i + 1

결과는 삭제되지 않습니다

여기에 사진 설명 삽입

TimedRotatingFileHandler의 소스 코드보기

def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False):
        BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
        self.when = when.upper()
        self.backupCount = backupCount
        self.utc = utc      
        if self.when == 'S':
            self.interval = 1 # one second
            self.suffix = "%Y-%m-%d_%H-%M-%S"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}$"
        elif self.when == 'M':
            self.interval = 60 # one minute
            self.suffix = "%Y-%m-%d_%H-%M"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}$"
        elif self.when == 'H':
            self.interval = 60 * 60 # one hour
            self.suffix = "%Y-%m-%d_%H"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}$"
        elif self.when == 'D' or self.when == 'MIDNIGHT':
            self.interval = 60 * 60 * 24 # one day
            self.suffix = "%Y-%m-%d"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}$"
        elif self.when.startswith('W'):
            self.interval = 60 * 60 * 24 * 7 # one week
            if len(self.when) != 2:
                raise ValueError("You must specify a day for weekly rollover from 0 to 6 (0 is Monday): %s" % self.when)
            if self.when[1] < '0' or self.when[1] > '6':
                raise ValueError("Invalid day specified for weekly rollover: %s" % self.when)
            self.dayOfWeek = int(self.when[1])
            self.suffix = "%Y-%m-%d"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}$"
        else:
            raise ValueError("Invalid rollover interval specified: %s" % self.when)

        self.extMatch = re.compile(self.extMatch)
        self.interval = self.interval * interval # multiply by units requested
        if os.path.exists(filename):
            t = os.stat(filename)[ST_MTIME]
        else:
            t = int(time.time())
        self.rolloverAt = self.computeRollover(t)

핵심은 다음과 같습니다.

self.suffix = "%Y-%m-%d_%H-%M-%S"
self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}$"
······
······
self.extMatch = re.compile(self.extMatch)

When type이 기본으로 설정되면 접미사가 고정되고 일치하는 규칙도 소스 코드에 기록되므로 접미사를 수정하면 규칙을 함께 수정해야합니다.

최종 코드는 다음과 같습니다.

log = logging.getLogger()
log.setLevel(logging.ERROR)  # 日志等级为ERROR

fh = logging.handlers.TimedRotatingFileHandler("log", when='S', interval=1, backupCount=3)
fh.suffix = "%Y-%m-%d_%H-%M-%S.log"
fh.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}.log$"
fh.extMatch = re.compile(fh.extMatch)
formatter = logging.Formatter('[%(asctime)s] - %(filename)s [Line:%(lineno)d] - [%(levelname)s]-[thread:%(thread)s]-[process:%(process)s] - %(message)s') 
fh.setFormatter(formatter)
log.addHandler(fh)
i = 0
while i < 100000000:
    sleep(0.1)
    log.error("记录" + str(i))
    i = i + 1

 

 

 

추천

출처blog.csdn.net/qingfengxd1/article/details/112982026