log4cplus::SocketAppender 尝试记录超过 8000 个字符的缓冲区时出错
log4cplus::SocketAppender error when attempting to log a buffer with more than 8000 characters
我正在尝试通过 log4cplus::SocketAppender
记录消息。这些消息使用 google protobuf 序列化。
我发送小尺寸的日志没有问题。但是,如果我尝试记录字符长度大于 8000 的消息,我会收到以下错误消息:
log4cplus:ERROR SocketBuffer::appendString()- Attempt to write beyond end of buffer
我目前的解决方法是在通过网络发送之前将这些缓冲区分成更小的块。
这是我的 属性 文件(名为 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;
}
问题:
- 是不是我在 属性 文件中遗漏了什么导致了这个问题?
- 有没有办法增加此套接字缓冲区大小,以便我可以发送超过 8000 个字符的缓冲区?
如果您的 MyBuffer
是二进制数据,那么您使用的 log4cplus 是错误的。它旨在记录文本字符串,而不是二进制数据。
此外,缓冲区的长度限制为 8*1024
字节。参见 socketappender.h
。
我正在尝试通过 log4cplus::SocketAppender
记录消息。这些消息使用 google protobuf 序列化。
我发送小尺寸的日志没有问题。但是,如果我尝试记录字符长度大于 8000 的消息,我会收到以下错误消息:
log4cplus:ERROR SocketBuffer::appendString()- Attempt to write beyond end of buffer
我目前的解决方法是在通过网络发送之前将这些缓冲区分成更小的块。
这是我的 属性 文件(名为 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;
}
问题:
- 是不是我在 属性 文件中遗漏了什么导致了这个问题?
- 有没有办法增加此套接字缓冲区大小,以便我可以发送超过 8000 个字符的缓冲区?
如果您的 MyBuffer
是二进制数据,那么您使用的 log4cplus 是错误的。它旨在记录文本字符串,而不是二进制数据。
此外,缓冲区的长度限制为 8*1024
字节。参见 socketappender.h
。