Windows 上的 Syslog 处理程序仅限于 UDP

Syslog hander limited to UDP on Windows

我正在使用带有 Syslog 处理程序的日志记录配置文件。我正在使用 nxlog。文档说 "On Windows, you pretty much have to use the UDP option".

[handler_syslogHandler]
class=handlers.SysLogHandler
level=DEBUG
formatter=syslogFormatter
args=(('localhost', 1514), handlers.SysLogHandler.LOG_LOCAL5, 1)

请注意,使用 socket.SOCK_STREAM 会引发异常 NameError: name 'socket' is not defined 因此我不得不替换 args 列表中的等效数字。

您能否提供有关 python 文档中的评论的更多详细信息?为什么 Windows 上只有 UDP?

Windows 中没有 Unix 域套接字,因此除了 UDP 端口 514 之外,没有受支持的 syslog 接口。 Windows 向导可能想出一种方法来模拟域套接字作为带有管道或组件对象模型 (COM) 的 IPC 机制,但作为一种非标准解决方案,它无法在系统之间工作。

我怀疑此文档不在您的选择范围内 date/understating...回到第一次实施 syslog 时,只有一种网络传输方式,那就是 UDP。但是,如果您使用的是 UNIX 并且有本地系统日志守护程序,则可以使用 domain sockets 将日志发送到该服务器。

因此,在那个时代,Windows 唯一真正的选择是使用 UDP 套接字(因为 Windows 没有域套接字)。然而,自 2009 年以来,Python 中出现了其他 options as other transports have become available and then made available

可以肯定的是,我刚刚在 Windows 安装中检查了您的配置文件,没有问题。套接字错误只是它无法识别名称,Python 仍然非常乐意尝试连接到 TCP 套接字。

SOCK_STREAM 用于 TCP。 UDP 需要 SOCK_DGRAM。

Why only UDP on Windows?

TCP 和 UDP 在 windows 上可用,Unix 域套接字不可用。