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!
    }

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

你可能感兴趣的:(log)