!27 feat: 新增trace中间件强化日志链路追踪和响应头
* refactor: trace_log重命名为trace_middleware * refactor: 日志处理器重构为类式写法 * perf: 移除无用文件 * perf: 优化trace中间件部分写法 * style: 格式化代码 * Merge branch 'master' into develop * feature: 1.日志添加traceId链路追踪 2.response-header默认添加request-id与traceId对应
This commit is contained in:
@@ -1,11 +1,60 @@
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from loguru import logger
|
||||
from loguru import logger as _logger
|
||||
from typing import Dict
|
||||
from middlewares.trace_middleware import TraceCtx
|
||||
|
||||
log_path = os.path.join(os.getcwd(), 'logs')
|
||||
if not os.path.exists(log_path):
|
||||
os.mkdir(log_path)
|
||||
|
||||
log_path_error = os.path.join(log_path, f'{time.strftime("%Y-%m-%d")}_error.log')
|
||||
class LoggerInitializer:
|
||||
def __init__(self):
|
||||
self.log_path = os.path.join(os.getcwd(), 'logs')
|
||||
self.__ensure_log_directory_exists()
|
||||
self.log_path_error = os.path.join(self.log_path, f'{time.strftime("%Y-%m-%d")}_error.log')
|
||||
|
||||
logger.add(log_path_error, rotation='50MB', encoding='utf-8', enqueue=True, compression='zip')
|
||||
def __ensure_log_directory_exists(self):
|
||||
"""
|
||||
确保日志目录存在,如果不存在则创建
|
||||
"""
|
||||
if not os.path.exists(self.log_path):
|
||||
os.mkdir(self.log_path)
|
||||
|
||||
@staticmethod
|
||||
def __filter(log: Dict):
|
||||
"""
|
||||
自定义日志过滤器,添加trace_id
|
||||
"""
|
||||
log['trace_id'] = TraceCtx.get_id()
|
||||
return log
|
||||
|
||||
def init_log(self):
|
||||
"""
|
||||
初始化日志配置
|
||||
"""
|
||||
# 自定义日志格式
|
||||
format_str = (
|
||||
'<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | '
|
||||
'<cyan>{trace_id}</cyan> | '
|
||||
'<level>{level: <8}</level> | '
|
||||
'<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - '
|
||||
'<level>{message}</level>'
|
||||
)
|
||||
_logger.remove()
|
||||
# 移除后重新添加sys.stderr, 目的: 控制台输出与文件日志内容和结构一致
|
||||
_logger.add(sys.stderr, filter=self.__filter, format=format_str, enqueue=True)
|
||||
_logger.add(
|
||||
self.log_path_error,
|
||||
filter=self.__filter,
|
||||
format=format_str,
|
||||
rotation='50MB',
|
||||
encoding='utf-8',
|
||||
enqueue=True,
|
||||
compression='zip',
|
||||
)
|
||||
|
||||
return _logger
|
||||
|
||||
|
||||
# 初始化日志处理器
|
||||
log_initializer = LoggerInitializer()
|
||||
logger = log_initializer.init_log()
|
||||
|
Reference in New Issue
Block a user