我试图理解为什么SyslogHandler类来自Python的日志框架(日志记录处理程序)不实现RFC 6587所述的任何成帧机制:
八位字节计数:它将消息长度“前置”到syslog帧:
非透明框架:分隔消息的尾部字符。这是大多数服务器所理解的。
这个“问题”可以通过在消息末尾添加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}$现在开始工作了。在
现在,我要做的是重写emit()方法,对SyslogHandler进行子类化。在
假设这个问题被标记为}-请看https://github.com/fluent/fluent-logger-python?在
fluentd
,你有没有试过用fluent.handler.FluentHandler
代替{logging
中的Syslog支持早于RFC,而在RFC之前,几乎没有标准。在准确地说:} module from 1997 。在
SysLogHandler
处理程序是logging
的一部分,自first added to the Python standard library in 2002起基本保持不变(TCP支持是added in 2009,RFC5424支持在2011年得到了改进);原始代码基于this ^{从other bug reports很明显,维护人员希望在代码中保持最广泛的向后兼容性,因此,如果您需要更新的RFC的特定功能,您有两个选择:
logging
模块中的功能;请考虑向后兼容性要求。在相关问题 更多 >
编程相关推荐