Log 4 cppクラッシュ
1444 ワード
Log 4 cppクラッシュ
昨日のテストでLog 4 cpp印刷のクラッシュ問題が発生しましたが、すぐには発生しませんでした.マルチスレッドの場合、高速印刷は3分ほどで跳ねます.クラッシュ位置は以下の通りです.
上の行を太くした「oprater<<」関数はクラッシュしますが、この関数はシステム関数でformat()という関数しか見られません.私が使っているのはOstreamAppender+PatternLayoutの形式で、このformat関数はPatternLayoutで実現されています.次のように
この場所の転換に問題があるのではないかと疑って、以下の形式に変更しました.
直してから崩れない.しかし、まだ深く研究する時間がないので、先に残しておきます.
昨日のテストでLog 4 cpp印刷のクラッシュ問題が発生しましたが、すぐには発生しませんでした.マルチスレッドの場合、高速印刷は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!
}
直してから崩れない.しかし、まだ深く研究する時間がないので、先に残しておきます.