Python syslog 记录器不能写入超过 2048 个字符
Posted
技术标签:
【中文标题】Python syslog 记录器不能写入超过 2048 个字符【英文标题】:Python syslog logger can't write more than 2048 chars 【发布时间】:2013-03-26 09:38:15 【问题描述】:我正在尝试使用 Python 的 syslog 记录器将一些消息打印到 syslog。 “How to configure logging to syslog in python?”中描述的简单记录器:
import logging
import logging.handlers
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler()
my_logger.addHandler(handler)
my_logger.debug('this is debug')
但是当我尝试打印像 my_logger.debug('<<4000 chars>>')
这样的很长的消息时,它只打印前 2046 个字符。 Python 中有没有这样的已知限制?
据我所知,Python 支持非常大的字符串输入,并且所有参数都作为引用传递,因此处理如此大的输入应该没有任何问题。有什么想法吗?
【问题讨论】:
我相信这是系统日志限制,而不是 Python 限制。你可以编写自己的处理程序来做任何你想做的事情。 是的,可能就是那个。在得出结论之前,我只是想淘汰 python。 【参考方案1】:默认情况下,rsyslogd 限制为每条消息 2048 个字节,但您可以使用 /etc/rsyslog.conf
中的 $MaxMessageSize
参数进行设置:
$MaxMessageSize , 默认 2k - 允许指定最大值 支持的消息大小(用于发送和接收)。
参考:http://www.rsyslog.com/doc/v8-stable/configuration/global/index.html
【讨论】:
【参考方案2】:你应该使用 GELF http://www.graylog2.org/about/gelf
Graylog 扩展日志格式 (GELF) 避免了以下缺点 经典的普通系统日志:
Limited to length of 1024 byte - Not much space for payloads like backtraces Unstructured. You can only build a long message string and define priority, severity etc.
你可以从Does Syslog really have a 1KB message limit?阅读更多内容
【讨论】:
以上是关于Python syslog 记录器不能写入超过 2048 个字符的主要内容,如果未能解决你的问题,请参考以下文章
Java Syslog 仅使用 logback 记录到本地机器