diff --git a/apps/common/utils/logger.py b/apps/common/utils/logger.py index ac1113693..aae000c1d 100644 --- a/apps/common/utils/logger.py +++ b/apps/common/utils/logger.py @@ -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 diff --git a/apps/maxkb/settings/logging.py b/apps/maxkb/settings/logging.py index b28211e7b..33dcea46e 100644 --- a/apps/maxkb/settings/logging.py +++ b/apps/maxkb/settings/logging.py @@ -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,