log4cplus::SocketAppender在尝试记录超过8000个字符的缓冲区时出错



我正在尝试通过log4cplus::SocketAppender记录消息。这些消息使用google protobuf序列化。发送小尺寸的日志没有问题。但是,如果我尝试记录字符长度大于8000的消息,我会得到以下错误消息:

log4cplus:ERROR SocketBuffer::appendString()-尝试写入超出缓冲区结束

我目前的解决方法是在通过网络发送之前将这些缓冲区分成更小的块。

下面是我的属性文件(名为test.properties)的一个片段:
log4cplus.rootLogger=TRACE
log4cplus.logger.loglogger  = TRACE,SocketAppender
log4cplus.appender.SocketAppender = log4cplus::SocketAppender
log4cplus.appender.SocketAppender.host=127.0.0.1
log4cplus.appender.SocketAppender.port = 5555
log4cplus.appender.SocketAppender.serverName = simpleserver

这是我的发件人代码片段:

int main()
{           
log4cplus::initialize();
LogLog::getLogLog()->setInternalDebugging(true);
{
ConfigureAndWatchThread* configureThread = new ConfigureAndWatchThread(LOG4CPLUS_TEXT("test.properties"), 1000);

root = Logger::getRoot();
loglogger = Logger::getInstance("loglogger");
loglogger.setLogLevel(ALL_LOG_LEVEL);
unsigned char Mybuffer[10000];

//populating and serializing code for Mybuffer 

LOG4CPLUS_INFO(loglogger,Mybuffer);    
}
return 0;
}

问题:

  1. 是我在导致此问题的属性文件中缺少的东西吗?
  2. 是否有办法增加这个套接字缓冲区大小,以便我可以发送超过8000个字符的缓冲区?

如果您的MyBuffer是二进制数据,那么您使用log4cplus是错误的。它用于记录文本字符串,而不是二进制数据。

另外,缓冲区的长度限制为8*1024字节。参见socketappender.h

最新更新