Log 4 cppクラッシュ

1444 ワード

Log 4 cppクラッシュ
 
昨日のテストで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!
    }

直してから崩れない.しかし、まだ深く研究する時間がないので、先に残しておきます.