我在/etc/rsyslog.conf
中有这个:
local0.* /var/log/local.log
而且我有一个简单的python脚本,它从标准输入中读取并应该发送给local0
#!/usr/bin/python3
import sys, syslog
syslog.openlog(ident="MY_SCRIPT", facility=syslog.LOG_LOCAL0)
for line in sys.stdin:
syslog.syslog(syslog.LOG_WARNING, f"Message\n\n")
但是它不起作用。 rsyslog
看不到该消息是local0
仅当我更改为*.*
时,rsyslog才看到它:
*.* /var/log/local.log
我假设我没有在我的python脚本中正确配置该工具。
如何指定我要登录到local0
?
Rsyslog和本地*:
[Rsyslog]具有设施local0
至local7
,它们是syslog为用户提供的“自定义”未使用设施。如果开发人员创建了一个应用程序并希望将其记录到syslog,或者要将任何输出重定向到syslog(例如Apache日志),则可以选择将其发送到任何local#
工具。然后,您可以使用/etc/syslog.conf
(或/etc/rsyslog.conf
)将发送到该local#
的日志保存到文件中,或将其发送到远程服务器(source)。
Config:
在/etc/rsyslog.conf
下
local0.* /var/log/local.log
这是正确的,它将日志文件/var/log/local.log
分配给登录到local0的应用程序。作为另一个示例,kern.=warn -/var/log/kernel/warnings.log
可用于记录内核警告。
Python应用程序/脚本:
#!/usr/bin/python3
import sys, syslog
syslog.openlog(ident="MY_SCRIPT", facility=syslog.LOG_LOCAL0)
for line in sys.stdin:
syslog.syslog(syslog.LOG_WARNING, f"Message {line}\n\n")
初始代码确实起作用,并且如注释中所指出,this可以用作替代,并且已按照@ apoorva-kamath的建议添加了{line}
变量...
这里重要的一面是Python脚本和Rsyslog之间的通信。
也正如命令所指出的,尝试重新加载rsyslog systemctl restart rsyslog
;您也可以使用rsyslogd -N1
检查Rsyslog配置,并使用以下方法检查rsyslog是否正常工作:
sudo cat /var/log/messages | grep rsyslog
取决于Python脚本运行的上下文,与Rsyslog的通信可能会失败,需要有关配置的更多详细信息,否则,您可以尝试(从脚本的上下文中进行:)
logger -p local0.error "TroubleshootingTest"
最后检查数据传输:
sudo netstat -taupn | grep syslog
文档:
有关Python syslog,troubleshooting Rsyslog和Rsyslog facility的更多详细信息>