【问题标题】:How do I find my program name?如何找到我的程序名称?
【发布时间】:2026-01-13 11:50:02
【问题描述】:

问题

我无法使用 syslog 写入与默认日志不同的日志。我不确定我的应用名称在我的配置中是否有误。 “程序名称”和“进程名称”不是同一个意思吗?如果没有,如何在 Python 3.6 中找到我的程序名称?

已尝试

我用 Python 3.6 编写了一个小应用程序。我已经成功地用它在 CentOS 7 中以/var/log/messages 写入了一个通用系统日志文件。如果我打开那个文件,我可以看到我的条目。

如果我运行ps aux | grep myappname,则进程名称列为python myappname.py

我在/etc/rsyslog.d/00-myconfig.conf 创建了一个文件,其内容是:

if $programname contains 'myappname' then /home/user/test_log.log
& ~

我已经用sudo systemctl restart rsyslog重新启动了这个过程。

我运行了rsyslogd -N1,它给了我一个关于我在我的配置中使用~ 的弃用警告,证明配置正在被识别。我已尝试删除该行,因为我不确定它的作用,但这也无济于事。

我可以确认这些条目仍在写入/var/log/messages。条目不会烟消云散。

【问题讨论】:

标签: python python-3.x centos7 rsyslog


【解决方案1】:

由于 syslog 自然不会在日志中包含 appname,因此您需要在创建日志消息时自行添加。这里是使用带有--tag 的Linux logger 命令的示例。

logger --tag="myappname" "Some message"

因此,在调整任何内容之前,请检查您的rsyslog.conf 是否包含来自/etc/rsyslog.d/ 的文件(因为即使您没有将它们包含在您的rsyslog.conf 中,它们也会被检查。

# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf")

如果错误仍然存​​在,则必须调整您的查询。最简单的方法是使用基于属性的过滤器。

:syslogtag, isequal, "myappname" /var/log/test_log.log

&~

*.* /var/log/messages

配置检查myappname 是否等于日志中的hostname。如果是这样,则将其写入test_log.log。下一行 (&~) 然后丢弃所有已写入的消息。因此,不会对这些消息应用其他规则。因此,它们不会被写入/var/log/messages

重要提示:使用比较操作isequal时,被比较的两个值必须完全相等(区分大小写)才能匹配。有关基于属性的过滤器的更多信息,请参阅rsyslog documentation


P.S. 查看 this post 以进一步了解 &~ 在 rsyslog 中的含义。

【讨论】:

    最近更新 更多