logging - 尝试记录超过 8000 个字符的缓冲区时出现 log4cplus::SocketAppender 错误
问题描述
我正在尝试通过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;
}
问题:
- 是我在导致此问题的属性文件中缺少的东西吗?
- 有没有办法增加这个套接字缓冲区的大小,以便我可以发送超过 8000 个字符的缓冲区?
解决方案
如果您MyBuffer
是二进制数据,那么您使用 log4cplus 错误。它旨在记录文本字符串,而不是二进制数据。
8*1024
此外,缓冲区的字节长度也有限制。见socketappender.h
。
推荐阅读
- perl - 解析 PLC 文件中的字符串
- python - 如何修复 pymongo.errors.OperationFailure:
- apache-httpcomponents - Gzip 解压缩不适用于 Apache CachingHttpClient 版本 5.0.3
- javascript - 将平面数据转换为 3 级层次结构/树
- oracle - 如何根据主键对 ORACLE 表中的数据进行分类?
- html - Snipcart data-item-url 在本地主机上不起作用
- unity3d - 不受定向光影响的丑陋水着色器
- node.js - Mongoose 我们找不到合适的 typescript 泛型来支持嵌套查询
- redis - Laravel 8 Sail Redis 不假设默认缓存驱动程序
- flutter - 挂载小部件后如何显示值?