Python日志在Datadog中全部显示为错误状态的问题
解决Datadog将所有Python日志标记为错误的问题
问题出在默认的jsonlogger.JsonFormatter输出的日志级别格式不符合Datadog的识别规范,导致Datadog无法正确识别日志级别,默认归类为错误。
原因分析
Datadog默认期望日志中包含level或status字段,且字段值为小写的标准级别(info/warn/error等)。而你的代码中,默认的JsonFormatter会输出levelname字段,值为大写的INFO/WARNING/ERROR,Datadog无法识别这种格式,因此统一标记为错误。
代码修复方案
修改日志格式化逻辑,输出Datadog能识别的级别字段:
import logging from pythonjsonlogger import jsonlogger # 自定义过滤器,将日志级别转为小写并适配Datadog格式 class LowercaseLevelFilter(logging.Filter): def filter(self, record): record.level = record.levelname.lower() # 将WARNING转为Datadog常用的warn if record.level == "warning": record.level = "warn" return True logger = logging.getLogger() # 设置全局日志级别,确保info级别的日志能正常输出 logger.setLevel(logging.INFO) logHandler = logging.StreamHandler() # 指定输出格式,包含Datadog可识别的level字段 formatter = jsonlogger.JsonFormatter("%(level)s %(message)s") logger.addFilter(LowercaseLevelFilter()) logHandler.setFormatter(formatter) logger.addHandler(logHandler) logger.info('this is info') logger.warning('this is warning') logger.error('this is error')
额外检查点
如果修改代码后问题仍存在,检查Datadog Agent的日志采集配置:
- 确保在
datadog.yaml或日志采集规则中,正确配置了级别提取规则,指定从level字段读取日志级别。 - 排查是否有采集配置强制将所有日志级别设为错误。
内容的提问来源于stack exchange,提问作者Son
相关产品推荐
相关产品推荐

