如何在Django中将日志级别改为3字符格式?
在Django中自定义日志级别显示名称
在Python里可以通过logging.addLevelName(logging.DEBUG, 'DBG')修改日志级别的显示名称,在Django里有两种常用实现方式:
方法一:全局修改(直接调用addLevelName)
Django启动时会加载settings.py,你可以在配置代码的任意位置(建议放在LOGGING配置前)添加日志级别名称的自定义代码,只需先导入logging模块:
import logging from typing import Any # 自定义各日志级别的显示名称 logging.addLevelName(logging.DEBUG, 'DBG') logging.addLevelName(logging.INFO, 'INF') logging.addLevelName(logging.WARNING, 'WRN') logging.addLevelName(logging.ERROR, 'ERR') logging.addLevelName(logging.CRITICAL, 'CRT') # 你的原有LOGGING配置 LOGGING: dict[Any, Any] = { 'version': 1, 'formatters': { 'app_log_format': { 'format': '%(asctime)s [%(levelname)s] %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S', }, }, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': current_log_path, 'formatter': 'app_log_format', }, }, 'loggers': { '': { 'handlers': ['file'], 'level': 'INFO', 'propagate': True, }, }, }
这种方式会全局生效,项目中所有使用logging模块输出的日志,其级别名称都会被替换。
方法二:自定义Formatter(针对特定日志输出生效)
如果只想修改特定日志处理器的级别名称,可自定义一个Formatter类,重写格式化逻辑:
import logging class CustomLevelFormatter(logging.Formatter): # 定义级别名称映射 LEVEL_NAME_MAP = { logging.DEBUG: 'DBG', logging.INFO: 'INF', logging.WARNING: 'WRN', logging.ERROR: 'ERR', logging.CRITICAL: 'CRT' } def format(self, record): # 替换当前日志记录的级别名称 record.levelname = self.LEVEL_NAME_MAP.get(record.levelno, record.levelname) return super().format(record)
然后修改LOGGING配置中的formatter,指定使用这个自定义类(注意填写类的完整路径,比如如果在settings.py中定义,就写django.conf.settings.CustomLevelFormatter):
LOGGING: dict[Any, Any] = { 'version': 1, 'formatters': { 'app_log_format': { # 指定自定义Formatter类 '()': 'django.conf.settings.CustomLevelFormatter', 'format': '%(asctime)s [%(levelname)s] %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S', }, }, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': current_log_path, 'formatter': 'app_log_format', }, }, 'loggers': { '': { 'handlers': ['file'], 'level': 'INFO', 'propagate': True, }, }, }
这种方式只会对使用该formatter的日志处理器生效,更灵活。
内容的提问来源于stack exchange,提问作者Izik
相关产品推荐
相关产品推荐

