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! }
改完之后不崩溃了。但还没时间深究,先留着
posted on 2012-12-16 20:06 dangerman 阅读(1099) 评论(0) 编辑 收藏 举报