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

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

  • 相关阅读:
    web api 设置允许跨域,并设置预检请求时间
    T4模板
    DDD模式
    Vue watch用法
    第三章--第五节:集合
    简单的Python API爬虫与数据分析教程--目录
    第三章--第四节:字典
    第三章--第三节(补充):列表排序
    汇总张小龙在知乎上的问答
    第三章--第三节:列表
  • 原文地址:https://www.cnblogs.com/dangerman/p/2820806.html
Copyright © 2020-2023  润新知