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 记录到本地机器

Docker 守护进程写入 syslog 但为啥

java 在linux环境下写入 syslog 问题研究

python的日志模块logging和syslog

除了 syslog 之外,Linux 服务/守护程序文件记录最佳实践是啥? [关闭]

Labview 打开数据记录文件与写入数据记录文件不能连接