这是我正在使用的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上,我可以看到日志级别,但仍然不在日记中。
答案 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