2.使用log4cpp记录日志

2017-09-12  本文已影响0人  Pokerpoke

简介

log4cpp是个基于LGPL的开源项目,是基于优秀的日志处理跟踪项目Java语言的log4j移植过来的。

优点

配置及使用

  1. 包含头文件
#include <log4cpp/Category.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/OstreamAppender.hh>
  1. 初始化附加目的地(appenders)
// 输出到std::cout
log4cpp::Appender *appender = new log4cpp::OstreamAppender("root", &std::cout);
// 输出到log文件
log4cpp::Appender *appender = new log4cpp::FileAppender("root", "test.log");
  1. 设置输出格式(layout)
log4cpp::PatternLayout *patternLayout = new log4cpp::PatternLayout();
patternLayout->setConversionPattern("%d [%p] - %m%n");
appender->setLayout(patternLayout);

其他相关可以自己设置相关提示信息

  1. 设置类别(categories)和优先级(priority)
log4cpp::Category &root = log4cpp::Category::getRoot();
root.setPriority(log4cpp::Priority::NOTICE);
root.addAppender(appender);
  1. 定义一个宏定义
// 使用 LOG(WARN) << "message" 的格式来记录日志 
#define LOG(__level) log4cpp::Category::getRoot() << log4cpp::Priority::__level << "\n\t" << __FILE__ << " " << __LINE__ << ": "
  1. 在文件中记录打印日志
...
LOG(INFO) << "Device open success.";
...
LOG(ERROR) << "Device open failed.";
...

设置优先级以后只有高于所设置优先级的信息会被记录下来,因此可以通过宏定义来实现Debug和Release不同的信息优先级。

  1. 运行结果示例
2017-09-12 09:31:28,317 [INFO] - 
    /home/jiang/git/aero-node/an-core/example/qa_voice_capture.cc 36: Device open success.

2017-09-12 09:31:28,318 [INFO] - 
    /home/jiang/git/aero-node/an-core/example/qa_voice_capture.cc 59: Initialize hardware parameter success.

2017-09-12 09:31:28,318 [INFO] - 
    /home/jiang/git/aero-node/an-core/example/qa_voice_capture.cc 70: Set access type success.
  1. 其他
上一篇 下一篇

猜你喜欢

热点阅读