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

如何在Python Logger格式化中条件性覆盖levelname以匹配NLog?

解决Python日志与NLog格式对齐及级别名称匹配问题

可以通过两种方式实现日志级别名称的替换和对齐,完美匹配NLog的格式:

方法一:自定义过滤器添加NLog风格级别字段

创建一个日志过滤器,给日志记录添加转换后的NLog级别字段,再在格式中使用该字段:

import logging

class NLogLevelFilter(logging.Filter):
    # 定义Python到NLog的级别映射
    LEVEL_MAP = {
        'WARNING': 'WARN',
        'CRITICAL': 'FATAL',
        'DEBUG': 'DEBUG',
        'INFO': 'INFO',
        'ERROR': 'ERROR'
    }

    def filter(self, record):
        # 给日志记录添加自定义的NLog级别字段
        record.nlog_level = self.LEVEL_MAP.get(record.levelname, record.levelname)
        return True

# 配置日志
formatter = logging.Formatter(
    format='%(asctime)s.%(msecs)04d - %(nlog_level)5s - %(module)s, Line %(lineno)d - %(message)s\n',
    datefmt='%Y-%m-%d %H:%M:%S'
)

handler = logging.FileHandler('your_shared_log.log')
# 添加自定义过滤器
handler.addFilter(NLogLevelFilter())
handler.setFormatter(formatter)

logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

方法二:重写日志格式化器直接替换级别名称

继承默认的Formatter,在格式化流程中直接替换级别名称:

import logging

class NLogFormatter(logging.Formatter):
    # 用日志级别编号映射,避免字符串匹配的潜在问题
    LEVEL_MAP = {
        logging.WARNING: 'WARN',
        logging.CRITICAL: 'FATAL',
        logging.DEBUG: 'DEBUG',
        logging.INFO: 'INFO',
        logging.ERROR: 'ERROR'
    }

    def format(self, record):
        # 替换原级别名称为NLog风格
        record.levelname = self.LEVEL_MAP.get(record.levelno, record.levelname)
        return super().format(record)

# 配置日志
formatter = NLogFormatter(
    format='%(asctime)s.%(msecs)04d - %(levelname)5s - %(module)s, Line %(lineno)d - %(message)s\n',
    datefmt='%Y-%m-%d %H:%M:%S'
)

handler = logging.FileHandler('your_shared_log.log')
handler.setFormatter(formatter)

logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

两种方法都能实现:

  • 将Python的WARNING转为NLog的WARN,CRITICAL转为FATAL
  • 级别名称按5字符宽度右对齐,和NLog日志完美对齐

内容的提问来源于stack exchange,提问作者ysi_d

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:52:37