Python 网络设备的 Syslog 服务器

Python Syslog server for network devices

正在为我的网络设备创建一个 python 系统日志服务器 我正在使用来自此处的以下代码 https://gist.githubusercontent.com/marcelom/4218010/raw/53b643bd056d03ffc21abcfe2e1b9f6a7de005f0/pysyslog.py

这将满足我的需要,但我似乎无法获得 运行 的任何 python 版本的 sysloghandler。我看到这是大约 5 年左右的旧代码。 我是运行ning ubuntu 16.04系统。一切似乎都挂在 try: 用于启动服务器。

 #!/usr/bin/env python

## Tiny Syslog Server in Python.
##
## This is a tiny syslog server that is able to receive UDP based syslog
## entries on a specified port and save them to a file.
## That's it... it does nothing else...
## There are a few configuration parameters.

LOG_FILE = 'youlogfile.log'
HOST, PORT = "0.0.0.0", 514

#
# NO USER SERVICEABLE PARTS BELOW HERE...
#

import logging
import SocketServer

logging.basicConfig(level=logging.INFO, format='%(message)s', datefmt='', filename=LOG_FILE, filemode='a')

class SyslogUDPHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        data = bytes.decode(self.request[0].strip())
        socket = self.request[1]
        print( "%s : " % self.client_address[0], str(data))
        logging.info(str(data))

if __name__ == "__main__":
    try:
        server = SocketServer.UDPServer((HOST,PORT), SyslogUDPHandler)
        server.serve_forever(poll_interval=0.5)
    except (IOError, SystemExit):
        raise
    except KeyboardInterrupt:
        print ("Crtl+C Pressed. Shutting down.")

你的代码对我有用。如果我这样启动服务器:

sudo python server.py

然后发送这样的消息:

echo this is a test | nc -u localhost 514

我在标准输出上看到输出:

('127.0.0.1 : ', 'this is a test')

文件 youlogfile.log 包含:

this is a test

我怀疑您的问题源于尝试使用 TCP 工具连接到 UDP 服务器。