如何在 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 学习四

安装Python 3.6 在Ubuntu 16.04 LTS 版本

如何在 Windows 上将 Python 3.8 切换到 Python 3.6 作为默认值?

详解如何在 Linux 中安装最新的 Python 3.6 版本