这是我正在使用的python。
$ python3 --version
Python 3.5.2
Run Code Online (Sandbox Code Playgroud)
这是一些谷歌搜索后的测试代码(如何通过 Python 登录到 journald (systemd)?)。我正在尝试使用日志日志。
#!/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")
Run Code Online (Sandbox Code Playgroud)
我期待在日志中看到类似的内容:
WARNING: warn
INFO: info
ERROR: error
DEBUG: debug
Run Code Online (Sandbox Code Playgroud)
但这就是实际显示的内容:
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
Run Code Online (Sandbox Code Playgroud)
日志消息没有日志级别的前缀。谢谢您的帮助。
更多信息,
我也尝试格式化。
logging.basicConfig(format='%(levelname)s %(message)s')
Run Code Online (Sandbox Code Playgroud)
然后在标准输出上,我可以看到日志级别,但仍然没有在日志中。
您的 basicConfig 语句将创建一个 StreamHandler,您在此处设置的格式仅适用于您在 stdout 上获得的日志。查看Formatter 对象的文档,其中说If no fmt is specified, '%(message)s' is used。. 因此,您必须创建一个单独的 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")
Run Code Online (Sandbox Code Playgroud)
这会在日志中提供您想要的输出
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2564 次 |
| 最近记录: |