You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:05:17