如何找到我的程序名称?

Nat*_*ith 6 python rsyslog python-3.x centos7

问题

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

尝试过

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

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

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

if $programname contains 'myappname' then /home/user/test_log.log
& ~
Run Code Online (Sandbox Code Playgroud)

我已经用 重新启动了该过程sudo systemctl restart rsyslog

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

我可以确认条目仍在写入中/var/log/messages。这些条目不会化为乌有。

eDo*_*key 0

由于syslog自然不会在日志中包含应用程序名称,因此您需要在创建日志消息时自行添加。下面是使用 Linux记录器命令和--tag.

logger --tag="myappname" "Some message"
Run Code Online (Sandbox Code Playgroud)

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

# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf")
Run Code Online (Sandbox Code Playgroud)

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

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

&~

*.* /var/log/messages
Run Code Online (Sandbox Code Playgroud)

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

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


PS查看这篇文章以进一步解释&~rsyslog 中的含义。