zoukankan      html  css  js  c++  java
  • Log4cpp 崩溃

    Log4cpp 崩溃

    昨天测试时出现Log4cpp打印崩溃问题,不是很快出现,多线程情况下快速打印大概3分钟左右会蹦,崩溃位置如下

        void OstreamAppender::_append(const LoggingEvent& event) {
            (*_stream) << _getLayout().format(event);
            if (!_stream->good()) {
                // XXX help! help!
            }
        }
    

      上面加粗那行的 “oprater<<” 函数崩溃,但这个函数是系统函数,只能看看format()这个函数。我使用的是OstreamAppender + PatternLayout的形式,这个format函数在PatternLayout中实现。如下

        std::string PatternLayout::format(const LoggingEvent& event) {
            std::ostringstream message;
    
            for(ComponentVector::const_iterator i = _components.begin();
                i != _components.end(); ++i) {
                (*i)->append(message, event);
            }
    
            return message.str();
        }
    

      怀疑就是这个地方转换的时候会有问题,改为如下形式:

        std::string PatternLayout::format(const LoggingEvent& event) {
            std::ostringstream message;
    
            for(ComponentVector::const_iterator i = _components.begin();
                i != _components.end(); ++i) {
                (*i)->append(message, event);
            }
            return std::string(message.str());  //Here!
        }

    改完之后不崩溃了。但还没时间深究,先留着

  • 相关阅读:
    Linux 性能监测:CPU
    Linux 性能监测:介绍
    数据库设计
    数据库设计
    如何将Virtualbox和VMware虚拟机相互转换
    如何将Virtualbox和VMware虚拟机相互转换
    stat()获得文件信息
    stat()获得文件信息
    网游创业为什么会失败?
    网游创业为什么会失败?
  • 原文地址:https://www.cnblogs.com/dangerman/p/2820806.html
Copyright © 2011-2022 走看看