1.building log4cpp
./configure
make
make check
make install
安装完毕后,会在 /usr/local/
里的include
和lib
文件夹里面看到了log4cpp
的头文件和库文件
2. log4cpp有3个主要的组件:categories(类别)、appenders(附加目的地)、和 layouts(布局)。
layout类控制输出日志消息的显示样式(看起来像什么)。
appender类用来输出日志(被layout格式化后的)到一些设备上。appender和layout的关系是layout附在appender上,appender类调用layout处理完日志消息后,记录到某个设备上。
category 类真正完成记录日志功能,两个主要组成部分是appenders和priority(优先级)。
3. 手动使用log4cpp的基本步骤如下:
实例化一个layout 对象;
初始化一个appender 对象;
把layout对象附着在appender对象上;
调用log4cpp::Category::getInstance("name"). 实例化一个category对象;
把appender对象附到category上(根据additivity的值取代其他appender或者附加在其他appender后);
设置category的优先级;
#include "log4cpp/Category.hh"
#include "log4cpp/FileAppender.hh"
#include "log4cpp/BasicLayout.hh"
int main(int argc, char* argv[])
{
// 1实例化一个layout 对象
log4cpp::Layout* layout =
new log4cpp::BasicLayout();
// 2. 初始化一个appender 对象
log4cpp::Appender* appender = new
log4cpp::FileAppender("FileAppender",
"./test_log4cpp1.log");
// 3. 把layout对象附着在appender对象上
appender->setLayout(layout);
// 4. 实例化一个category对象
log4cpp::Category& warn_log =
log4cpp::Category::getInstance("mywarn");
// 5. 设置additivity为false,替换已有的appender
warn_log.setAdditivity(false);
// 5. 把appender对象附到category上
warn_log.setAppender(appender);
// 6. 设置category的优先级,低于此优先级的日志不被记录
warn_log.setPriority(log4cpp::Priority::WARN);
// 记录一些日志
warn_log.info("Program info which cannot be wirten");
warn_log.debug("This debug message will fail to write");
warn_log.alert("Alert info");
// 其他记录日志方式
warn_log.log(log4cpp::Priority::WARN, "This will be a logged warning");
log4cpp::Priority::PriorityLevel priority;
bool this_is_critical = true;
if(this_is_critical)
priority = log4cpp::Priority::CRIT;
else
priority = log4cpp::Priority::DEBUG;
warn_log.log(priority,"Importance depends on context");
warn_log.critStream() << "This will show up << as "
<< 1 << " critical message"
<< log4cpp::CategoryStream::ENDLINE;
// clean up and flush all appenders
log4cpp::Category::shutdown();
return 0;
}
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,虽然g++ -L/usr/local/lib虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这个库路径加上-Wl,-R,即添加g++参数“-Wl,-R动态库库路径”。
g++ log4cpp.cpp -llog4cpp -lpthread -Wl,-R/usr/local/lib
便利的开发工具-log4cpp快速使用指南:http://www.ibm.com/developerworks/cn/linux/l-log4cpp/