看不到 systemd 管理的程序的日志

看不到 systemd 管理的程序的日志

我正在使用 systemd 管理 Ubuntu 16 上的一个程序。我似乎无法从程序中获取日志以输出到journalctl/var/log/syslog。journald 配置是默认配置,它至少应该将所有日志消息(<调试)转发到 syslog。以下是 journald 配置:

>> cat /etc/systemd/journald.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

程序定义是:

[Unit]
Description=My Program
After=network.target

[Service]
User=vagrant
Restart=always
WorkingDirectory=/vagrant/transporter
Environment=PORT=8080
ExecStart=/usr/bin/python3.5 catcher.py

当我print在程序中执行调用时,我没有在journalctl或中看到任何输出/var/log/syslog。似乎日志没有命中journalctl,这是第一个问题,但我不明白如何更改配置以获取这些日志。如果我python3.5 catcher.py从 shell 手动运行程序( ),我确实会在控制台上看到打印输出。

我尝试过将 ExecStart 改为使用,python3.5 -u以便不缓冲 stdout,但没有奏效。我还尝试过将 journald.confForwardToConsole设置更改为 yes,然后重新启动systemd-journald服务。

任何帮助,将不胜感激。

答案1

我通过使用解决了这个问题python-systemd包装包装如下所述 这篇 stackoverflow 文章。其要点如下:

import logging
from systemd.journal import JournalHandler

log = logging.getLogger('demo')
log.addHandler(JournalHandler())
log.setLevel(logging.INFO)
log.info("sent to journal")

注意,你需要安装操作系统包python-systemd(例如apt-get install python-systemd在 Ubuntu 上),而不是 pip 包。显然它们是不同的。

相关内容