上一篇文章介绍如何编译Log4cpp,现在介绍一下如何使用它。
Log4cpp有三个主要的组件:日志类别(Category)、输出源(Appender)和布局(Layout)。
-
日志类别(Category):如果配置文件中设置日志的级别是DEBUG,则任意的log都能打印出来,因为DEBUG是最低的级别;但如果配置的级别是ERROR,则只有高于ERROR优先级的日志才可以打印出来。
优先级:DEBUG < INFO < WARN < ERROR < FATAL -
输出源(Appender):用来输出日志(被layout格式化后)到一些设备上,比如文件、命令行、内存等,也可以定义自己的appender输出日志信息到别的设备上。log4cpp提供的appender如下: FileAppender 输出到文件 ;ConsoleAppender 输出到控制台。
-
布局(Layout):显示样式PatternLayout表示让用户根据类似于C语言printf函数的转换模式来指定输出日志的文本格式。
%d 输出日志时间点的日期或时间,可以在其后指定格式,如上%d{%Y-%m-%d %H:%M:%S.%l},输出类似:2019-01-14 09:25:00.953
%p 优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%c 输出日志信息所属的类目,通常就是所在类的全名
%m 输出log的具体信息
%n 回车换行
%p 优先级;
%r 自从layout被创建后的毫秒数;
%R 从1970年1月1日0时开始到目前为止的秒数;
%u 进程开始到目前为止的时钟周期数;
三个组件之间的关系:
- Category和Appender的关系是:多个Appender可以附加到一个Category上,这样一个日志消息可以同时输出到多个设备上;
- Appender和Layout的关系是:Layout附加在Appender上,appender调用layout处理完日志消息后,记录到某个设备上。
1.包含头文件
#include <log4cpp/Category.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/FileAppender.hh>
2.调用程序:
//创建一个Layout;
log4cpp::PatternLayout* layout = new log4cpp::PatternLayout();
//指定输出的布局格式;
layout->setConversionPattern("%d: %p %c %x: %m%n");
//创建一个文件Appender;
log4cpp::Appender* fileAppender = new log4cpp::FileAppender("fileAppender", "xxx.log");
//将指定的Layout添加到Appender;
fileAppender->setLayout(layout);
//从系统中得到Category的根;
log4cpp::Category& category = log4cpp::Category::getRoot().getInstance("RootName");
//将Appender添加到Category;
category.addAppender(fileAppender);
//设置Category的优先级;
category.setPriority(log4cpp::Priority::DEBUG);
//开始记录日志;
category.info("这是一条信息日志");
category.warn("这是一条警告日志");
category.error("这是一条错误日志");
category.debug("这是一条调试日志");
category.fatal("这是一条严重错误日志");
//关闭Category;
log4cpp::Category::shutdown();
运行结果,在文件xxx.log中输出内容: