番外篇5-log4cpp简单实现

log4cpp实现
1.设置日志的格式
在这里插入图片描述
2.设置日志的目的
在这里插入图片描述
3.Category设置日志的种类(日志记录器)
在这里插入图片描述
4.日志打印的级别分类
设置日志的优先级
在这里插入图片描述

二、编译代码

g++ testLog4cpp.cc -llog4cpp -lpthread

三、测试案例
1.简单的打印

void test()
{
    //日志的格式
    //basi对比simple增加了时间戳
    /* BasicLayout *pbl = new BasicLayout(); */
    //simple为嘴简陋的格式
    SimpleLayout *psl = new SimpleLayout();

    //日志的目的地
    /* OstreamAppender *pos = new OstreamAppender("OstreamAppender123", &cout); */
    /* pos->setLayout(pbl); */
    //cout表示输出到屏幕上
    //第一个参数OstreamAppender123没用
    OstreamAppender *pos = new OstreamAppender("OstreamAppender123", &cout);
    //绑定日志的格式
    pos->setLayout(psl);
    
    //日志种类(日志记录器)
    Category &root = Category::getRoot();
    //和日志目的地绑定
    root.addAppender(pos);
    //能打印ERROR及ERROR级别以上的错误
    root.setPriority(Priority::ERROR);//过滤器

    //打印信息测试日志输出
    root.fatal("The log is fatal");
    root.alert("The log is alter");
    root.crit("The log is crit");
    root.error("The log is error");
    root.warn("The log is warn");

    //回收资源
    Category::shutdown();

}

//basic打印信息为
1620788978 FATAL :The log is fatal
1620788978 ALERT : The log is alter
//simple打印信息为
FATAL :The log is fatal
ALERT : The log is alter

2.打印指定格式的日志信息

void test2()
{
    //设置定制的指定日志的格式
    PatternLayout *ppl1 = new PatternLayout();
    //%d 时间
    //%c 日志的级别,也就是category的名字
    //%p 日志的优先级
    //%m 日志的信息
    //%n 换行符,根据平台的不同而不同,对客户透明
    ppl1->setConversionPattern("%d %c [%p] %m %n");

    PatternLayout *ppl2 = new PatternLayout();
    ppl2->setConversionPattern("%d %c [%p] %m %n");

    //日志的目的地
    OstreamAppender *pos = new OstreamAppender("OstreamAppender123", &cout);
    pos->setLayout(ppl1);

	//备份3个日志备份,一个大小为5k
    RollingFileAppender *ppfa = 
        new RollingFileAppender("RollingFileAppender123", "test.log",
                                5 * 1024, 3);
    ppfa->setLayout(ppl2);
    
    //日志种类(日志记录器)
    Category &root = Category::getRoot();
    root.addAppender(pos);
    root.addAppender(ppfa);
    root.setPriority(Priority::ERROR);//过滤器

    size_t idx = 0;
    while(idx < 100)
    {
       root.fatal("The log is fatal");
       root.alert("The log is alter");
       root.crit("The log is crit");
       root.error("The log is error");
       root.warn("The log is warn");
       ++idx;
    }
    //回收资源
    Category::shutdown();
}

//打印信息为
2021-05-12 11:15:07,776 [FATAL] The log is fatal
2021-05-12 11:15:07,776 [ALERT] The log is alter

3.同时输出日志到终端和文件

void test3()
{
    //日志的格式
    PatternLayout *ppl1 = new PatternLayout();
    ppl1->setConversionPattern("%d %c [%p] %m %n");

    PatternLayout *ppl2 = new PatternLayout();
    ppl2->setConversionPattern("%d %c [%p] %m %n");

    //要用两个,ppl1和ppl2,不然两个指针pos和pfl指向同一个ppl,释放时会core dumped
    //日志的目的地
    OstreamAppender *pos = new OstreamAppender("OstreamAppender123", &cout);
    pos->setLayout(ppl1);
    //输出日志到wd.log
    FileAppender *pfl = new FileAppender("FileAppender1234", "wd.log");
    pfl->setLayout(ppl2);
    
    //日志种类(日志记录器)
    //由于前面的%c也就是日志的级别,也就是category的名字打印不出来
    //这里补写为Mycat
    Category &root = Category::getRoot().getInstance("MyCat");
    root.addAppender(pos);
    root.addAppender(pfl);
    root.setPriority(Priority::ERROR);//过滤器

    root.fatal("The log is fatal");
    root.alert("The log is alter");
    root.crit("The log is crit");
    root.error("The log is error");
    root.warn("The log is warn");

    //回收资源
    Category::shutdown();

}

//打印信息为
2021-05-12 11:15:07,776 Mycat [FATAL] The log is fatal
2021-05-12 11:15:07,776 Mycat [ALERT] The log is alter

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值