小编Jos*_*eph的帖子

Python 在日志记录中向基于 structlog 的格式化程序添加额外的字段

我正在尝试将日志的额外字段添加为键值,同时继续使用标准日志记录库和 structlog ProcessorFormatter。

这是一个例子:

如果我们使用 JsonFormatter,额外的字段将作为键值添加到日志中。

使用 python-json-logger:

formatter = jsonlogger.JsonFormatter()
handler = logging.StreamHandler()
handler.setFormatter(formatter)

logging.basicConfig(
    level=logging.DEBUG,
    handlers=[handler]
)

logger = logging.getLogger('testnameloger1')
logger.debug('testmsg2', extra={'extra2': 2})
Run Code Online (Sandbox Code Playgroud)

安慰:

{"message": "testmsg2", "extra2": 2}
Run Code Online (Sandbox Code Playgroud)

在日志记录中使用基于结构日志的格式化程序进行渲染:

shared_processors = [
    structlog.stdlib.add_logger_name,
    structlog.stdlib.add_log_level,
    structlog.processors.TimeStamper(fmt='iso'),
]

formatter = structlog.stdlib.ProcessorFormatter(
    processor=structlog.processors.JSONRenderer(),
    foreign_pre_chain=shared_processors,
)
handler = logging.StreamHandler()
handler.setFormatter(formatter)

logging.basicConfig(
    level=logging.DEBUG,
    handlers=[handler]
)

logger = logging.getLogger('testnameloger1')
logger.debug('testmsg1', extra={'extra1': 1})
Run Code Online (Sandbox Code Playgroud)

安慰:

{"event": "testmsg1", "logger": "testnameloger1", "level": "debug", "timestamp": "2020-06-16T13:33:50.881221Z"}
Run Code Online (Sandbox Code Playgroud)

如何在日志输出中添加额外字段?

我想要的日志格式如下:

{"event": "testmsg1", "extra1": 1, "logger": "testnameloger1", "level": "debug", "timestamp": "2020-06-16T13:33:50.881221Z"}
Run Code Online (Sandbox Code Playgroud)

感谢您的见解

python logging json stdout structlog

5
推荐指数
1
解决办法
2463
查看次数

标签 统计

json ×1

logging ×1

python ×1

stdout ×1

structlog ×1