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