我的 /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 )。
配置:
下 /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可以用作替代和
{line}
变量已按照@apoorva-kamath 的建议添加...这里重要的一面是 Python脚本和Rsyslog之间的通信 .
同样在命令 try 上指出的是重新加载 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
关于python-3.x - 从 python 脚本登录到 rsyslog 工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62111942/