Skip to content

Commit 6698627

Browse files
committed
Update the log file compression
1 parent 452ccd7 commit 6698627

File tree

3 files changed

+24
-14
lines changed

3 files changed

+24
-14
lines changed

backend/common/log.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
from backend.core import path_conf
1212
from backend.core.conf import settings
13+
from backend.core.path_conf import LOG_DIR
14+
from backend.utils.timezone import timezone
1315

1416

1517
class InterceptHandler(logging.Handler):
@@ -58,11 +60,11 @@ def setup_logging() -> None:
5860
# Debug log handlers
5961
# logging.debug(f'{logging.getLogger(name)}, {logging.getLogger(name).propagate}')
6062

61-
# 定义 correlation_id 默认过滤函数
63+
# correlation_id 过滤器
6264
# https://github.com/snok/asgi-correlation-id/issues/7
6365
def correlation_id_filter(record):
64-
cid = correlation_id.get(settings.LOG_CID_DEFAULT_VALUE)
65-
record['correlation_id'] = cid[: settings.LOG_CID_UUID_LENGTH]
66+
cid = correlation_id.get(settings.TRACE_ID_LOG_DEFAULT_VALUE)
67+
record['correlation_id'] = cid[: settings.TRACE_ID_LOG_UUID_LENGTH]
6668
return record
6769

6870
# 配置 loguru 处理器
@@ -81,13 +83,20 @@ def correlation_id_filter(record):
8183

8284
def set_custom_logfile() -> None:
8385
"""设置自定义日志文件"""
84-
log_path = path_conf.LOG_DIR
85-
if not os.path.exists(log_path):
86-
os.mkdir(log_path)
86+
if not os.path.exists(LOG_DIR):
87+
os.mkdir(LOG_DIR)
8788

8889
# 日志文件
89-
log_access_file = os.path.join(log_path, settings.LOG_ACCESS_FILENAME)
90-
log_error_file = os.path.join(log_path, settings.LOG_ERROR_FILENAME)
90+
log_access_file = os.path.join(LOG_DIR, settings.LOG_ACCESS_FILENAME)
91+
log_error_file = os.path.join(LOG_DIR, settings.LOG_ERROR_FILENAME)
92+
93+
# 日志压缩回调
94+
def compression(filepath):
95+
filename = filepath.split(os.sep)[-1]
96+
original_filename = filename.split('.')[0]
97+
if '-' in original_filename:
98+
return os.path.join(LOG_DIR, f'{original_filename}.log')
99+
return os.path.join(LOG_DIR, f'{original_filename}_{timezone.now().strftime("%Y-%m-%d")}.log')
91100

92101
# 日志文件通用配置
93102
# https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add
@@ -96,7 +105,7 @@ def set_custom_logfile() -> None:
96105
'enqueue': True,
97106
'rotation': '00:00',
98107
'retention': '7 days',
99-
'compression': 'tar.gz',
108+
'compression': lambda filepath: os.rename(filepath, compression(filepath)),
100109
}
101110

102111
# 标准输出文件

backend/core/conf.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,16 +143,17 @@ class Settings(BaseSettings):
143143
IP_LOCATION_REDIS_PREFIX: str = 'fba:ip:location'
144144
IP_LOCATION_EXPIRE_SECONDS: int = 60 * 60 * 24 # 1 天
145145

146-
# 追踪 ID
146+
# 日志(Trace ID)
147147
TRACE_ID_REQUEST_HEADER_KEY: str = 'X-Request-ID'
148+
TRACE_ID_LOG_DEFAULT_VALUE: str = '-'
149+
TRACE_ID_LOG_UUID_LENGTH: int = 32 # UUID 长度,必须小于等于 32
148150

149-
# 日志
150-
LOG_CID_DEFAULT_VALUE: str = '-'
151-
LOG_CID_UUID_LENGTH: int = 32 # 日志 correlation_id 长度,必须小于等于 32
151+
# 日志(控制台)
152152
LOG_STD_LEVEL: str = 'INFO'
153153
LOG_STD_FORMAT: str = (
154154
'<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</> | <lvl>{level: <8}</> | <cyan>{correlation_id}</> | <lvl>{message}</>'
155155
)
156+
# 日志(文件)
156157
LOG_ACCESS_FILE_LEVEL: str = 'INFO'
157158
LOG_ERROR_FILE_LEVEL: str = 'ERROR'
158159
LOG_ACCESS_FILENAME: str = 'fba_access.log'

backend/utils/trace_id.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ def get_request_trace_id(request: Request) -> str:
1212
:param request: FastAPI 请求对象
1313
:return:
1414
"""
15-
return request.headers.get(settings.TRACE_ID_REQUEST_HEADER_KEY) or settings.LOG_CID_DEFAULT_VALUE
15+
return request.headers.get(settings.TRACE_ID_REQUEST_HEADER_KEY) or settings.TRACE_ID_LOG_DEFAULT_VALUE

0 commit comments

Comments
 (0)