记录使用log4cpp析构报错

问题描述:

使用单元测试测试log4cpp相关代码,退出是log4gcpp析构报错。 下面是个简单的log4cpp使用,标准输出和文件输出,运行功能都是可以的,但是析构时报错

#1 0x00007ffff7b9ab9c in log4cpp::LayoutAppender::~LayoutAppender() () from …/output/lib/liblog4cpp.so.5
#2 0x00007ffff7b9d8b8 in log4cpp::OstreamAppender::~OstreamAppender() () from …/output/lib/liblog4cpp.so.5

#include <iostream>
#include <log4cpp/Category.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/RollingFileAppender.hh>

using namespace std;

int main(int argc, char const *argv[])
{
    log4cpp::OstreamAppender app("osAppender", &cout);

    log4cpp::PatternLayout *layout = new log4cpp::PatternLayout();
    layout->setConversionPattern("%d: %p %c : %m%n");
    app.setLayout(layout);

    log4cpp::RollingFileAppender* rollfileAppender = new log4cpp::RollingFileAppender("roAppender", "test.log", 1024, 4); 
    rollfileAppender->setLayout(layout);

    log4cpp::Category &root = log4cpp::Category::getRoot();
    log4cpp::Category &infoCategory = root.getInstance(string(argv[0]));

    infoCategory.addAppender(app);
    infoCategory.addAppender(rollfileAppender);

    infoCategory.setPriority(log4cpp::Priority::INFO);

    infoCategory.info("system is running...");
    infoCategory.warn("system has got a warn...");
    infoCategory.error("system has got an error...");
    infoCategory.fatal("system has crashed....");
    
    log4cpp::Category::shutdown();
    return 0;
}


原因分析:

根据分析释放LayoutAppender时出错,根据应用,两个Appender使用了同一个LayoutAppender,修改每个appender使用独立的LayoutAppender,测试通过。总结下来还是自己使用的问题,踩了一个坑记录一下。

解决方案:

#include <iostream>
#include <log4cpp/Category.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/RollingFileAppender.hh>

using namespace std;

int main(int argc, char const *argv[])
{
    log4cpp::OstreamAppender app("osAppender", &cout);

    log4cpp::PatternLayout *layout = new log4cpp::PatternLayout();
    layout->setConversionPattern("%d: %p %c : %m%n");
    app.setLayout(layout);
    
    log4cpp::PatternLayout *layout2 = new log4cpp::PatternLayout();  //使用独立的layout供新的appender使用
    layout2->setConversionPattern("%d: %p %c : %m%n");

    log4cpp::RollingFileAppender* rollfileAppender = new log4cpp::RollingFileAppender("roAppender", "test.log", 1024, 4); 
    rollfileAppender->setLayout(layout2);

    log4cpp::Category &root = log4cpp::Category::getRoot();
    log4cpp::Category &infoCategory = root.getInstance(string(argv[0]));

    infoCategory.addAppender(app);
    infoCategory.addAppender(rollfileAppender);

    infoCategory.setPriority(log4cpp::Priority::INFO);

    infoCategory.info("system is running...");
    infoCategory.warn("system has got a warn...");
    infoCategory.error("system has got an error...");
    infoCategory.fatal("system has crashed....");
    
    log4cpp::Category::shutdown();
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值