feat: Implement daily log rotation with DailyTimedRotatingFileHandler

This commit is contained in:
CaptainB 2025-07-20 14:16:13 +08:00
parent 12f69966b2
commit 6f2db6f488
2 changed files with 36 additions and 12 deletions

View File

@ -1,3 +1,29 @@
from datetime import datetime, timedelta
from logging.handlers import TimedRotatingFileHandler
import os
import logging
maxkb_logger = logging.getLogger('max_kb')
class DailyTimedRotatingFileHandler(TimedRotatingFileHandler):
def rotator(self, source, dest):
""" Override the original method to rotate the log file daily."""
dest = self._get_rotate_dest_filename(source)
if os.path.exists(source) and not os.path.exists(dest):
# 存在多个服务进程时, 保证只有一个进程成功 rotate
os.rename(source, dest)
@staticmethod
def _get_rotate_dest_filename(source):
date_yesterday = (
datetime.now() - timedelta(days=1)
).strftime('%Y-%m-%d')
path = [
os.path.dirname(source),
date_yesterday,
os.path.basename(source)
]
filename = os.path.join(*path)
os.makedirs(os.path.dirname(filename), exist_ok=True)
return filename

View File

@ -47,8 +47,9 @@ LOGGING = {
'file': {
'encoding': 'utf8',
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'maxBytes': 1024 * 1024 * 100,
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
'when': 'midnight',
'interval': 1,
'backupCount': 7,
'formatter': 'main',
'filename': MAX_KB_LOG_FILE,
@ -56,19 +57,21 @@ LOGGING = {
'drf_exception': {
'encoding': 'utf8',
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
'formatter': 'exception',
'maxBytes': 1024 * 1024 * 100,
'when': 'midnight',
'interval': 1,
'backupCount': 7,
'filename': DRF_EXCEPTION_LOG_FILE,
},
'unexpected_exception': {
'encoding': 'utf8',
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'exception',
'maxBytes': 1024 * 1024 * 100,
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
'when': 'midnight',
'interval': 1,
'backupCount': 7,
'formatter': 'exception',
'filename': UNEXPECTED_EXCEPTION_LOG_FILE,
},
'syslog': {
@ -103,11 +106,6 @@ LOGGING = {
'level': LOG_LEVEL,
'propagate': False,
},
'max_kb_error': {
'handlers': ['console', 'unexpected_exception'],
'level': LOG_LEVEL,
'propagate': False,
},
'max_kb': {
'handlers': ['console', 'file'],
'level': LOG_LEVEL,