feat: Implement daily log rotation with DailyTimedRotatingFileHandler
This commit is contained in:
parent
12f69966b2
commit
6f2db6f488
@ -1,3 +1,29 @@
|
|||||||
|
from datetime import datetime, timedelta
|
||||||
|
from logging.handlers import TimedRotatingFileHandler
|
||||||
|
import os
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
maxkb_logger = logging.getLogger('max_kb')
|
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
|
||||||
|
|||||||
@ -47,8 +47,9 @@ LOGGING = {
|
|||||||
'file': {
|
'file': {
|
||||||
'encoding': 'utf8',
|
'encoding': 'utf8',
|
||||||
'level': 'DEBUG',
|
'level': 'DEBUG',
|
||||||
'class': 'logging.handlers.RotatingFileHandler',
|
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
|
||||||
'maxBytes': 1024 * 1024 * 100,
|
'when': 'midnight',
|
||||||
|
'interval': 1,
|
||||||
'backupCount': 7,
|
'backupCount': 7,
|
||||||
'formatter': 'main',
|
'formatter': 'main',
|
||||||
'filename': MAX_KB_LOG_FILE,
|
'filename': MAX_KB_LOG_FILE,
|
||||||
@ -56,19 +57,21 @@ LOGGING = {
|
|||||||
'drf_exception': {
|
'drf_exception': {
|
||||||
'encoding': 'utf8',
|
'encoding': 'utf8',
|
||||||
'level': 'DEBUG',
|
'level': 'DEBUG',
|
||||||
'class': 'logging.handlers.RotatingFileHandler',
|
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
|
||||||
'formatter': 'exception',
|
'formatter': 'exception',
|
||||||
'maxBytes': 1024 * 1024 * 100,
|
'when': 'midnight',
|
||||||
|
'interval': 1,
|
||||||
'backupCount': 7,
|
'backupCount': 7,
|
||||||
'filename': DRF_EXCEPTION_LOG_FILE,
|
'filename': DRF_EXCEPTION_LOG_FILE,
|
||||||
},
|
},
|
||||||
'unexpected_exception': {
|
'unexpected_exception': {
|
||||||
'encoding': 'utf8',
|
'encoding': 'utf8',
|
||||||
'level': 'DEBUG',
|
'level': 'DEBUG',
|
||||||
'class': 'logging.handlers.RotatingFileHandler',
|
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
|
||||||
'formatter': 'exception',
|
'when': 'midnight',
|
||||||
'maxBytes': 1024 * 1024 * 100,
|
'interval': 1,
|
||||||
'backupCount': 7,
|
'backupCount': 7,
|
||||||
|
'formatter': 'exception',
|
||||||
'filename': UNEXPECTED_EXCEPTION_LOG_FILE,
|
'filename': UNEXPECTED_EXCEPTION_LOG_FILE,
|
||||||
},
|
},
|
||||||
'syslog': {
|
'syslog': {
|
||||||
@ -103,11 +106,6 @@ LOGGING = {
|
|||||||
'level': LOG_LEVEL,
|
'level': LOG_LEVEL,
|
||||||
'propagate': False,
|
'propagate': False,
|
||||||
},
|
},
|
||||||
'max_kb_error': {
|
|
||||||
'handlers': ['console', 'unexpected_exception'],
|
|
||||||
'level': LOG_LEVEL,
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'max_kb': {
|
'max_kb': {
|
||||||
'handlers': ['console', 'file'],
|
'handlers': ['console', 'file'],
|
||||||
'level': LOG_LEVEL,
|
'level': LOG_LEVEL,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user