Log4cpp多线程崩溃

log4cpp使用多线程运行几分钟后出现崩溃,网上查找资料,找到解决办法,记录下

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

 上图标记位置为崩溃地方,源文件为OstreamAppender.cpp,源码作者很有意思,用help来暗示,应该是 “oprater<<” 函数引起崩溃,这个函数是系统函数,查看format()这个函数。由于使用的是OstreamAppender + PatternLayout的形式,函数使用在PatternLayout.cpp文件中:

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 message.str();
    	return std::string(message.str());  // modiffy dump Here!
}

 经过验证,崩溃解决!

你可能感兴趣的:(C++)