如何在logging dictConfig配置JsonFormatter?json配置文件第三方Formatter求助
如何在logging的dictConfig中配置JsonFormatter
先拆解你的配置文件问题
你的test.json存在几个关键错误,导致无法正常加载和使用:
disable_existing_loggers的值需要是布尔类型(不带引号的true),你写成了字符串"true",这会被logging模块解析失败。- handlers节点里的
formatte...是拼写错误+内容截断,正确的键应该是"formatter": "json",用来关联你定义的json格式化器。 JsonFormatter通常需要指定format参数,明确要输出的日志字段(比如时间、级别、消息等),否则默认输出的字段可能不全,不符合实际需求。- 别忘了先安装依赖库:
pip install python-json-logger,否则Python找不到这个第三方格式化器类。
修正后的完整配置示例
下面是可以正常运行的test.json配置,同时补充了logger的完整配置:
{ "version": 1, "disable_existing_loggers": true, "formatters": { "json": { "class": "pythonjsonlogger.jsonlogger.JsonFormatter", "format": "%(asctime)s %(levelname)s %(message)s %(name)s %(lineno)d" } }, "handlers": { "console": { "class": "logging.StreamHandler", "level": "DEBUG", "formatter": "json", "stream": "ext://sys.stdout" } }, "loggers": { "": { "level": "DEBUG", "handlers": ["console"], "propagate": true } } }
代码中加载配置的方式
在Python代码里这样使用这个配置文件:
import json import logging.config # 加载json配置 with open('test.json', 'r') as f: log_config = json.load(f) logging.config.dictConfig(log_config) # 测试输出 logger = logging.getLogger(__name__) logger.debug('调试信息:用户登录失败') logger.info('常规信息:系统启动完成') logger.error('错误信息:数据库连接超时')
关键配置细节说明
format参数:和普通logging的格式字符串逻辑一致,JsonFormatter会把这些字段转换成JSON的键值对。你可以根据需要添加字段,比如%(module)s(模块名)、%(funcName)s(函数名)等。class路径:必须写完整的类路径pythonjsonlogger.jsonlogger.JsonFormatter,因为这个类属于pythonjsonlogger.jsonlogger模块。disable_existing_loggers:设为true会禁用所有已存在的日志器,如果不需要这个效果,可以改成false,避免影响其他已初始化的日志实例。
内容的提问来源于stack exchange,提问作者Amir Mehler
相关产品推荐
相关产品推荐

