python3:日志日志记录不显示日志级别?

时间:2016-11-22 17:33:44

标签: python-3.x

这是我正在使用的python。

$ python3 --version
Python 3.5.2

这是一些谷歌搜索后的测试代码(How to log to journald (systemd) via Python?)。我正在尝试使用日志日志。

#!/usr/bin/python3

import logging
from systemd.journal import JournalHandler

log = logging.getLogger('test')
log.addHandler(JournalHandler())
log.setLevel(logging.DEBUG)
log.warning("warn")
log.info("info")
log.error("error")
log.debug("debug")

我希望在日志中看到类似的内容:

WARNING: warn
INFO: info
ERROR: error
DEBUG: debug

但这是实际显示的内容:

Nov 22 09:29:56 host1 ./test_log.py[8997]: warn
Nov 22 09:29:56 host1 ./test_log.py[8997]: info
Nov 22 09:29:56 host1 ./test_log.py[8997]: error
Nov 22 09:29:56 host1 ./test_log.py[8997]: debug

日志消息没有日志级别前缀。谢谢你的帮助。

更多信息,

我也尝试格式化。

logging.basicConfig(format='%(levelname)s %(message)s')

然后在stdout上,我可以看到日志级别,但仍然不在日记中。

1 个答案:

答案 0 :(得分:3)

您的basicConfig语句将创建一个StreamHandler,您在此处设置的格式仅适用于您在stdout上获取的日志。查看Formatter objects的文档,其中说明如果未指定fmt,则'%(消息)s'使用。。因此,您必须创建一个单独的Formatter并在JournalHandler上使用setFormatter来获得所需的输出。

以下代码的基本修改:

#!/usr/bin/env python

import logging
from systemd.journal import JournalHandler

log = logging.getLogger('test')
log_fmt = logging.Formatter("%(levelname)s %(message)s")
log_ch = JournalHandler()
log_ch.setFormatter(log_fmt)
log.addHandler(log_ch)
log.setLevel(logging.DEBUG)
log.warning("warn")
log.info("info")
log.error("error")
log.debug("debug")

这会在日志中提供所需的输出

Nov 24 01:16:50 localhost.localdomain app.py[11279]: WARNING warn
Nov 24 01:16:50 localhost.localdomain app.py[11279]: INFO info
Nov 24 01:16:50 localhost.localdomain app.py[11279]: ERROR error
Nov 24 01:16:50 localhost.localdomain app.py[11279]: DEBUG debug