forked from erp-dev/erp
feat: log formatted
This commit is contained in:
@@ -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 会携带 traceback,Formatter 会自动把 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,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user