微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决尝试记录超过 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;
}

问题:

  1. 是不是我在属性文件中遗漏了什么导致了这个问题?
  2. 有没有办法增加这个套接字缓冲区的大小,以便我可以发送超过 8000 个字符的缓冲区?

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。