【问题标题】:How can I receive syslog messages in a Python 3.6 program?如何在 Python 3.6 程序中接收系统日志消息?
【发布时间】:2019-07-01 07:40:05
【问题描述】:

我在 Google 上进行了快速搜索,发现了一些用于发送系统日志消息的 Python 模块。

如何在 Python 程序中接收系统日志消息? Python 3.6 标准库是否有一些我不知道的东西?

【问题讨论】:

  • gist.github.com/marcelom/4218010 这可能会给你一个提示。
  • 如果您已经在运行 rsyslogd,请查看answer 展示如何获取它,例如,将接收到的 udp 流量发送到 python 程序。

标签: python python-3.x syslog


【解决方案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'

用于测试我的测试设备的系统日志功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2021-09-25
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多