python-3.x - 从 python 脚本登录到 rsyslog 工具

标签 python-3.x logging syslog rsyslog

我的 /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有设施local0local7这是 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 RsyslogRsyslog facility

关于python-3.x - 从 python 脚本登录到 rsyslog 工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62111942/

相关文章:

json - 来自 STDIN 的 Python JSON 输入问题

crash - 树莓派2崩溃: Internal error oops preempt smp arm

mongodb - 无法将 mongo 数据库日志写入系统日志

Python 记录到控制台

python - Pandas:数据帧错误 - 传递了 2 列,传递的数据有 3 列

Python提取文件名正则表达式的一部分

java - 修改滚动日志文件名以在 log4j 中包含日期

Laravel-用户登录

java - 未登录 Google App Engine

Python 的 SyslogHandler 和 TCP