Update log output config and format (#759)

This commit is contained in:
Wu Clan
2025-08-07 16:46:56 +08:00
committed by GitHub
parent fe3a3b4e86
commit 0237d4c7b1
2 changed files with 34 additions and 15 deletions
+24 -7
View File
@@ -3,6 +3,7 @@
import inspect
import logging
import os
import re
import sys
from asgi_correlation_id import correlation_id
@@ -36,6 +37,18 @@ class InterceptHandler(logging.Handler):
logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())
def default_formatter(record):
"""默认日志格式化程序"""
# 重写 sqlalchemy echo 输出
# https://github.com/sqlalchemy/sqlalchemy/discussions/12791
record_name = record['name'] or ''
if record_name.startswith('sqlalchemy'):
record['message'] = re.sub(r'\s+', ' ', record['message']).strip()
return settings.LOG_FORMAT if settings.LOG_FORMAT.endswith('\n') else f'{settings.LOG_FORMAT}\n'
def setup_logging() -> None:
"""
设置日志处理器
@@ -48,9 +61,11 @@ def setup_logging() -> None:
logging.root.handlers = [InterceptHandler()]
logging.root.setLevel(settings.LOG_STD_LEVEL)
# 配置日志传播规则
for name in logging.root.manager.loggerDict.keys():
# 清空所有默认日志处理器
logging.getLogger(name).handlers = []
# 配置日志传播规则
if 'uvicorn.access' in name or 'watchfiles.main' in name:
logging.getLogger(name).propagate = False
else:
@@ -59,22 +74,24 @@ def setup_logging() -> None:
# Debug log handlers
# logging.debug(f'{logging.getLogger(name)}, {logging.getLogger(name).propagate}')
# 移除 loguru 默认处理器
logger.remove()
# correlation_id 过滤器
# https://github.com/snok/asgi-correlation-id/issues/7
def correlation_id_filter(record):
cid = correlation_id.get(settings.TRACE_ID_LOG_DEFAULT_VALUE)
record['correlation_id'] = cid[: settings.TRACE_ID_LOG_UUID_LENGTH]
record['correlation_id'] = cid[: settings.TRACE_ID_LOG_LENGTH]
return record
# 配置 loguru 处理器
logger.remove() # 移除默认处理器
logger.configure(
handlers=[
{
'sink': sys.stdout,
'level': settings.LOG_STD_LEVEL,
'format': default_formatter,
'filter': lambda record: correlation_id_filter(record),
'format': settings.LOG_STD_FORMAT,
}
]
)
@@ -100,7 +117,7 @@ def set_custom_logfile() -> None:
# 日志文件通用配置
# https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add
log_config = {
'format': settings.LOG_FILE_FORMAT,
'format': default_formatter,
'enqueue': True,
'rotation': '00:00',
'retention': '7 days',
@@ -110,7 +127,7 @@ def set_custom_logfile() -> None:
# 标准输出文件
logger.add(
str(log_access_file),
level=settings.LOG_ACCESS_FILE_LEVEL,
level=settings.LOG_FILE_ACCESS_LEVEL,
filter=lambda record: record['level'].no <= 25,
backtrace=False,
diagnose=False,
@@ -120,7 +137,7 @@ def set_custom_logfile() -> None:
# 标准错误文件
logger.add(
str(log_error_file),
level=settings.LOG_ERROR_FILE_LEVEL,
level=settings.LOG_FILE_ERROR_LEVEL,
filter=lambda record: record['level'].no >= 30,
backtrace=True,
diagnose=True,