400*_*Cat 7 logging syslog rsyslog python-3.x
我有这个/etc/rsyslog.conf:
local0.* /var/log/local.log
Run Code Online (Sandbox Code Playgroud)
我有一个简单的 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")
Run Code Online (Sandbox Code Playgroud)
但它不起作用。rsyslog没有看到消息local0
只有当我更改为*.*rsyslog才能看到它:
*.* /var/log/local.log
Run Code Online (Sandbox Code Playgroud)
我假设我没有在我的 python 脚本中正确配置工具。
如何指定我要登录local0?
Rsyslog 和本地*:
Rsysloglocal0具有local7syslog 为用户提供的“自定义”未使用设施。如果开发人员创建应用程序并希望将其记录到 syslog,或者如果您希望将任何内容的输出重定向到 syslog(例如 Apache 日志),则可以选择将其发送到任何设施local#。然后,您可以使用/etc/syslog.conf(或/etc/rsyslog.conf) 将发送到该文件的日志保存到local#文件,或将其发送到远程服务器 ( source )。
配置:
在下面/etc/rsyslog.conf
local0.* /var/log/local.log
Run Code Online (Sandbox Code Playgroud)
这是正确的,它将日志文件分配/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")
Run Code Online (Sandbox Code Playgroud)
初始代码确实有效,正如评论中指出的,这可以用作替代方案,并且{line}变量已按照 @apoorva-kamath 的建议添加...
这里重要的方面是Python 脚本和 Rsyslog 之间的通信。
另外,正如命令 try 所指出的那样,重新加载 rsyslog systemctl restart rsyslog;您还可以使用以下命令检查 Rsyslog 配置rsyslogd -N1并检查 rsyslog 是否正常工作:
sudo cat /var/log/messages | grep rsyslog
Run Code Online (Sandbox Code Playgroud)
根据 Python 脚本运行上下文,与 Rsyslog 的通信可能会失败,需要有关配置的更多详细信息,否则您可以尝试(从脚本的上下文):
logger -p local0.error "TroubleshootingTest"
Run Code Online (Sandbox Code Playgroud)
最后检查数据传输:
sudo netstat -taupn | grep syslog
Run Code Online (Sandbox Code Playgroud)
文档:
有关Python syslog、Rsyslog和Rsyslog 工具故障排除的更多详细信息
| 归档时间: |
|
| 查看次数: |
918 次 |
| 最近记录: |