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! }
改完之后不崩溃了。但还没时间深究,先留着