如何在 Python 3.6 程序中接收系统日志消息?
Posted
技术标签:
【中文标题】如何在 Python 3.6 程序中接收系统日志消息?【英文标题】:How can I receive syslog messages in a Python 3.6 program? 【发布时间】:2019-07-01 07:40:05 【问题描述】:我在 Google 上进行了快速搜索,发现了一些用于发送系统日志消息的 Python 模块。
如何在 Python 程序中接收系统日志消息? Python 3.6 标准库是否有一些我不知道的东西?
【问题讨论】:
gist.github.com/marcelom/4218010 这可能会给你一个提示。 如果您已经在运行 rsyslogd,请查看answer 展示如何获取它,例如,将接收到的 udp 流量发送到 python 程序。 【参考方案1】:系统日志消息应该由系统日志守护进程接收。您找不到用于接收 syslog 消息的 python 模块,因为通常不需要 python 程序来接收 syslog 消息。每台机器通常只有一个 syslog 守护进程接收 syslog 消息。
也许您应该寻找这个:Logging module for Python?它不是 syslog 的替代品,但更适合登录 99% 的 python 程序。
【讨论】:
谢谢。实际上,我确实需要一个 python 程序来接收 syslog 消息——我有网络设备将 syslog 发送到管理系统,我想编写某种逻辑来使用 AWS 服务发送 android 推送通知。让 syslog 守护进程写入文件是更好的选择吗?但是,对文件的写入将如何通知 Python 程序呢?如果可能,我想避免轮询以检测文件写入。【参考方案2】:默认情况下 rsyslog 使用 UDP。 Python 标准库有一个UDP Server example。我的骨头更加裸露了。
import socketserver
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
print(self.request[0])
with socketserver.UDPServer(('10.0.1.90', 9999), MyUDPHandler) as server:
server.serve_forever()
在我的测试设备上触发 rsyslog 消息导致:
b'<174>Oct 15 13:59:08 CN-6-12 Event: Logged into console: admin'
用于测试我的测试设备的系统日志功能。
【讨论】:
以上是关于如何在 Python 3.6 程序中接收系统日志消息?的主要内容,如果未能解决你的问题,请参考以下文章
Python Qt GUI设计:做一款串口调试助手(实战篇—1)
Python Qt GUI设计:做一款串口调试助手(实战篇—1)
安装Python 3.6 在Ubuntu 16.04 LTS 版本