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

Python logging库使用simpleFormatter如何保留日志中的双引号与反斜杠?

解决方案

你遇到的问题本质是直接用字符串模板拼接JSON时不会自动转义特殊字符,最终会生成非法JSON格式,以下是两种可行方案:

方案1:自定义Formatter(无额外依赖,自由度最高)

直接继承Python logging的Formatter类,通过json模块序列化日志内容,自动处理所有转义字符,同时可随意自定义输出字段:

  1. 首先实现自定义格式化类:
import json
import logging

class CustomJsonFormatter(logging.Formatter):
    def format(self, record):
        # 按需添加所需字段即可,无需修改其他配置
        log_item = {
            "@timestamp": self.formatTime(record, datefmt=self.datefmt),
            "message": record.getMessage()
            # 如需添加其他字段直接补在字典里即可,例如:
            # "level": record.levelname,
            # "lineno": record.lineno
        }
        return json.dumps(log_item, ensure_ascii=False)
  1. 修改config.ini中formatter的配置,替换原有simpleFormatter配置:
[formatter_simpleFormatter]
class=你存放上述类的文件名.CustomJsonFormatter
datefmt=%Y-%m-%d %H:%M:%S,%f
propagate=False
  1. 加载logging配置前提前导入sys和你实现的CustomJsonFormatter类即可,原有日志打印逻辑无需任何修改。

方案2:使用支持自定义字段的第三方JSON日志库

如果不想自己实现格式化逻辑,可以使用python-json-logger库,该库支持通过配置指定输出的字段列表,完全满足你仅输出少量自定义字段的需求,同时内置自动转义特殊字符的能力。


原有方案不生效的原因

你之前尝试使用%(message)r不生效是因为%r对应的repr输出会给字符串外层额外包裹引号,最终输出的JSON结构会不符合预期,不是正确的转义方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:24:04