Syslog 处理程序仅限于 Windows 上的 UDP
Posted
技术标签:
【中文标题】Syslog 处理程序仅限于 Windows 上的 UDP【英文标题】:Syslog hander limited to UDP on Windows 【发布时间】:2015-06-24 09:58:42 【问题描述】:我正在使用带有 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?
【问题讨论】:
【参考方案1】:我怀疑该文档已经过时/低估了您的选择...回到 syslog 首次实施时,它只有一个网络传输,那就是 UDP。但是,如果您使用 UNIX 并且有本地 syslog 守护程序,则可以使用 domain sockets 将日志发送到该服务器。
因此,在那个时候,Windows 唯一真正的选择是使用 UDP 套接字(因为 Windows 没有域套接字)。然而,自 2009 年以来,随着其他传输方式可用,出现了其他 options,然后是 Python 中的 made available。
可以肯定的是,我刚刚在我的 Windows 安装中检查了您的配置文件,这很好。套接字错误只是它无法识别名称,Python 仍然非常乐意尝试连接到 TCP 套接字。
【讨论】:
【参考方案2】:Unix 域套接字在 Windows 中不是一个东西,因此除了 UDP 端口 514 之外,没有支持的 syslog 接口。 Windows 向导可能会想出一种方法来将域套接字模拟为具有管道或组件对象模型 (COM) 的 IPC 机制,但作为一种非标准解决方案,它无法在系统之间运行。
【讨论】:
您在谈论地址族,但问题与套接字类型有关。 不是真的:) 我重新阅读了你的问题,然后我的答案。在我看来,我完全按照要求回答了它。无论如何,尽可能具体通常有助于获得您正在寻找的答案。祝你好运!【参考方案3】:SOCK_STREAM 用于 TCP。您需要用于 UDP 的 SOCK_DGRAM。
为什么在 Windows 上只有 UDP?
TCP 和 UDP 在 Windows 上都可用,Unix Domain Socket 不可用。
【讨论】:
虽然你说的一切都是真的,但它并没有回答我的问题。我也从来没有提到过 Unix Domain Sockets。以上是关于Syslog 处理程序仅限于 Windows 上的 UDP的主要内容,如果未能解决你的问题,请参考以下文章
Filamanaging 仅限于 Cpanel Filemanager?
jQuery Mobile phonegap 垂直内容仅限于 IOS 上的视口