gpt4 book ai didi

Python 的 SyslogHandler 和 TCP

转载 作者:可可西里 更新时间:2023-11-01 02:34:26 26 4
gpt4 key购买 nike

我试图理解为什么 Python 的日志记录框架 (logging.handlers) 中的 SyslogHandler 类没有实现 RFC 6587 描述的任何框架机制:

  1. 八位字节计数:它将消息长度“添加”到系统日志帧:

  2. Non-Transparent-Framing:分隔消息的尾符。这是大多数服务器理解的内容。

这个“问题”可以通过在消息末尾添加一个 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 都不起作用。正如我所说,我暂时将其添加到 handlers.py 的第 855 行(只是为了测试):

msg = prio + msg + '\n'

现在正在工作。


我的问题:

  1. Python SyslogHandler 类是否应该提供设置开/关八位字节计数或结尾字符的可能性。目前它什么都不做......
  2. 程序员的工作是了解服务器如何工作并重写处理程序以解决消息框架问题?

现在,我正在做的是覆盖 emit() 方法,子类化 SyslogHandler。

最佳答案

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

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

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

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

关于Python 的 SyslogHandler 和 TCP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40041697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com