1
0
forked from erp-dev/erp

feat: log formatted

This commit is contained in:
2026-06-26 17:03:54 +08:00
parent e8bf4b5e49
commit cb6589c884
26 changed files with 1410 additions and 50 deletions

View File

@@ -360,7 +360,7 @@ PRE_SALES_ORDER_CREATED_FOLLOWUP_URL_TEMPLATE = env(
# Logging configuration
# 目标:
# - 生产环境出现 500 时,能在 stdout 日志里看到完整 traceback
# - 所有日志都带时间戳(含毫秒),便于快速定位与检索
# - 所有日志以单行 JSON 输出,便于 Loki / Filebeat 检索与聚合
LOG_LEVEL = env('LOG_LEVEL', default='INFO').upper()
DJANGO_LOG_LEVEL = env('DJANGO_LOG_LEVEL', default=LOG_LEVEL).upper()
UVICORN_LOG_LEVEL = env('UVICORN_LOG_LEVEL', default=LOG_LEVEL).upper()
@@ -370,49 +370,60 @@ LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'default': {
# 注意Python logging 的 datefmt 基于 time.strftime不支持 %f
# 这里用 %(msecs)03d 输出毫秒。
'format': '%(asctime)s.%(msecs)03d [%(levelname)s] %(name)s: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
'json': {
'()': 'flower.logging_formatters.JsonFormatter',
},
},
'filters': {
'below_warning': {
'()': 'flower.logging_formatters.MaxLevelFilter',
'max_level': 'WARNING',
},
},
'handlers': {
'console': {
'stdout': {
'class': 'logging.StreamHandler',
'formatter': 'default',
'formatter': 'json',
'stream': 'ext://sys.stdout',
'filters': ['below_warning'],
},
'stderr': {
'class': 'logging.StreamHandler',
'formatter': 'json',
'stream': 'ext://sys.stderr',
'level': 'WARNING',
},
},
'root': {
'handlers': ['console'],
'handlers': ['stdout', 'stderr'],
'level': LOG_LEVEL,
},
'loggers': {
# Django 在发生未捕获异常500会通过 django.request 输出错误日志,
# record.exc_info 会携带 tracebackFormatter 会自动把 traceback 打到日志中。
'django.request': {
'handlers': ['console'],
'handlers': ['stdout', 'stderr'],
'level': 'ERROR',
'propagate': False,
},
'django': {
'handlers': ['console'],
'handlers': ['stdout', 'stderr'],
'level': DJANGO_LOG_LEVEL,
'propagate': False,
},
# Uvicorn 日志access/error统一走我们的 console formatter确保有时间戳
'uvicorn': {
'handlers': ['console'],
'handlers': ['stdout', 'stderr'],
'level': UVICORN_LOG_LEVEL,
'propagate': False,
},
'uvicorn.error': {
'handlers': ['console'],
'handlers': ['stdout', 'stderr'],
'level': UVICORN_LOG_LEVEL,
'propagate': False,
},
'uvicorn.access': {
'handlers': ['console'],
'handlers': ['stdout', 'stderr'],
'level': UVICORN_ACCESS_LOG_LEVEL,
'propagate': False,
},