Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 820|回复: 0
打印 上一主题 下一主题

Log4cpp多线程崩溃

[复制链接]

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
跳转到指定楼层
楼主
发表于 2023-5-22 19:42:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
log4cpp使用多线程运行几分钟后出现崩溃,网上查找资料,找到解决办法,记录下

void OstreamAppender::_append(const LoggingEvent& event) {
        (*_stream) << _getLayout().format(event);
        if (!_stream->good()) {
            // XXX help! help!
        }
}
上图标记位置为崩溃地方,源文件为OstreamAppender.cpp,源码作者很有意思,用help来暗示,应该是 “oprater<<” 函数引起崩溃,这个函数是系统函数,查看format()这个函数。由于使用的是OstreamAppender + PatternLayout的形式,函数使用在PatternLayout.cpp文件中:

std::string PatternLayout::format(const LoggingEvent& event) {
        std:stringstream 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:stringstream message;

        for(ComponentVector::const_iterator i = _components.begin();
            i != _components.end(); ++i) {
            (*i)->append(message, event);
        }

        //return message.str();
            return std::string(message.str());  // modiffy dump Here!
}
经过验证,崩溃解决!
————————————————
版权声明:本文为CSDN博主「Word哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/finghting321/article/details/102939339

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-2 08:40 , Processed in 0.055124 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表