Python的SyslogHandler和TCP

2024-05-08 20:10:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解为什么SyslogHandler类来自Python的日志框架(日志记录处理程序)不实现RFC 6587所述的任何成帧机制:

  1. 八位字节计数:它将消息长度“前置”到syslog帧:

  2. 非透明框架:分隔消息的尾部字符。这是大多数服务器所理解的。

这个“问题”可以通过在消息末尾添加LF字符来轻松解决,但是我希望SyslogHandler在默认情况下会处理这个问题:

sHandler = logging.handlers.SysLogHandler(address=(address[0], address[1]), socktype = socket.SOCK_STREAM)
sHandler.setFormatter(logging.Formatter(fmt=MSG_SYSLOG_FORMAT, datefmt=DATE_FMT))
self.addHandler(sHandler)

这既不适用于Fluentd,也不适用于rsyslog。如前所述,我暂时将此添加到处理程序.py(只是为了测试):

^{pr2}$

现在开始工作了。在


我的问题:

  1. Python SyslogHandler类是否应该提供打开/关闭八位字节计数或尾部字符的可能性。目前它什么也不做。。。
  2. 程序员的工作是了解服务器如何工作并重写处理程序来处理消息帧?

现在,我要做的是重写emit()方法,对SyslogHandler进行子类化。在


Tags: 服务器框架消息处理程序addressrfclogging记录
2条回答

假设这个问题被标记为fluentd,你有没有试过用fluent.handler.FluentHandler代替{}-请看https://github.com/fluent/fluent-logger-python?在

logging中的Syslog支持早于RFC,而在RFC之前,几乎没有标准。在

准确地说:SysLogHandler处理程序是logging的一部分,自first added to the Python standard library in 2002起基本保持不变(TCP支持是added in 2009,RFC5424支持在2011年得到了改进);原始代码基于this ^{} module from 1997。在

other bug reports很明显,维护人员希望在代码中保持最广泛的向后兼容性,因此,如果您需要更新的RFC的特定功能,您有两个选择:

  • 扩展类并自己实现该功能
  • 提交功能请求和/或修补程序以改进logging模块中的功能;请考虑向后兼容性要求。在

相关问题 更多 >