Skip to content

Commit 6f2db6f

Browse files
committed
feat: Implement daily log rotation with DailyTimedRotatingFileHandler
1 parent 12f6996 commit 6f2db6f

File tree

2 files changed

+36
-12
lines changed

2 files changed

+36
-12
lines changed

apps/common/utils/logger.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,29 @@
1+
from datetime import datetime, timedelta
2+
from logging.handlers import TimedRotatingFileHandler
3+
import os
14
import logging
25

36
maxkb_logger = logging.getLogger('max_kb')
7+
8+
9+
class DailyTimedRotatingFileHandler(TimedRotatingFileHandler):
10+
def rotator(self, source, dest):
11+
""" Override the original method to rotate the log file daily."""
12+
dest = self._get_rotate_dest_filename(source)
13+
if os.path.exists(source) and not os.path.exists(dest):
14+
# 存在多个服务进程时, 保证只有一个进程成功 rotate
15+
os.rename(source, dest)
16+
17+
@staticmethod
18+
def _get_rotate_dest_filename(source):
19+
date_yesterday = (
20+
datetime.now() - timedelta(days=1)
21+
).strftime('%Y-%m-%d')
22+
path = [
23+
os.path.dirname(source),
24+
date_yesterday,
25+
os.path.basename(source)
26+
]
27+
filename = os.path.join(*path)
28+
os.makedirs(os.path.dirname(filename), exist_ok=True)
29+
return filename

apps/maxkb/settings/logging.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,28 +47,31 @@
4747
'file': {
4848
'encoding': 'utf8',
4949
'level': 'DEBUG',
50-
'class': 'logging.handlers.RotatingFileHandler',
51-
'maxBytes': 1024 * 1024 * 100,
50+
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
51+
'when': 'midnight',
52+
'interval': 1,
5253
'backupCount': 7,
5354
'formatter': 'main',
5455
'filename': MAX_KB_LOG_FILE,
5556
},
5657
'drf_exception': {
5758
'encoding': 'utf8',
5859
'level': 'DEBUG',
59-
'class': 'logging.handlers.RotatingFileHandler',
60+
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
6061
'formatter': 'exception',
61-
'maxBytes': 1024 * 1024 * 100,
62+
'when': 'midnight',
63+
'interval': 1,
6264
'backupCount': 7,
6365
'filename': DRF_EXCEPTION_LOG_FILE,
6466
},
6567
'unexpected_exception': {
6668
'encoding': 'utf8',
6769
'level': 'DEBUG',
68-
'class': 'logging.handlers.RotatingFileHandler',
69-
'formatter': 'exception',
70-
'maxBytes': 1024 * 1024 * 100,
70+
'class': 'common.utils.logger.DailyTimedRotatingFileHandler',
71+
'when': 'midnight',
72+
'interval': 1,
7173
'backupCount': 7,
74+
'formatter': 'exception',
7275
'filename': UNEXPECTED_EXCEPTION_LOG_FILE,
7376
},
7477
'syslog': {
@@ -103,11 +106,6 @@
103106
'level': LOG_LEVEL,
104107
'propagate': False,
105108
},
106-
'max_kb_error': {
107-
'handlers': ['console', 'unexpected_exception'],
108-
'level': LOG_LEVEL,
109-
'propagate': False,
110-
},
111109
'max_kb': {
112110
'handlers': ['console', 'file'],
113111
'level': LOG_LEVEL,

0 commit comments

Comments
 (0)