log4cpp 是参考 log4j 所写的 c++ 版本的写 log 的库。可以在这里下载
http://log4cpp.sourceforge.net/
我的使用方法是:
1,定义了一个 _LOG4CPP 宏,用来打开或关闭 log4cpp 的调用,以便在完全不需要 log 的情况下可以运行,例如进行性能测试时;又比如 log4cpp 可能有内存泄露,关闭使用它,可以检查程序其它地方是否有泄露;
2,在写 log 时,自动加上函数名,以方便跟踪运行信息;(在 gcc 可以用可变参数宏定义,vc 中用其它办法,稍后说明)
3,每一个需要写 log 的类,都加上一个静态 log 实例,以方便通过配置,使得相应的 log 可以输出到指定的地方,有利于跟踪特定的运行信息;
4,不直接调用 log4cpp ,而是通过宏定义来使用,原因同1,即有利于关闭 log 功能;
基于以上几点,我写了几个函数及宏定义等,以下逐一说明:
// InitializeLog4cpp 从指定的 log 配置文件中读取信息,并初始化 log4cpp,这个函数在进程的入口处调用
void InitializeLog4cpp(const std::string & logfile);
// ReleaseLog4cpp 用于释入 log4cpp ,在进程的结束处调用
void ReleaseLog4cpp();
// 以下宏用于在类中声明一个静态变量,变量名为 "log"
DECLARE_STATIC_LOG()
// 以下宏用于初如化类中的 log 静态变量
DEFINE_STATIC_LOG(ClassName)
// 以下是用来写 log 信息的几个宏,严重级别分别为 DEBUG, INFO, NOTICE, ERROR
LogDebug
LogInfo
LogNotice
LogError
以下先演示一个应用实例:
Demo.h 文件主要内容:
#include "LogUtils.h"
private: };
|
Demo.cpp 文件主要内容:
#include "Demo.h"
Demo::Demo() Demo::~Demo() void Demo::TestIt(int i, int j)
|
再写个例子来运行,可以看到类似输出
[INFO] - Demo::Demo() -
[INFO] - Demo::TestIt() - i=1, j=2
[INFO] - Demo::~Demo() -
最后附上完整的
LogUtils.h
LogUtils.cpp
LogTracer.h (这个文件是因为 vc 不支持可变参数的宏,所以采用的取巧方法,这方法是从网上搜来的,出处忘了,请见谅。)
LogUtils.h
#ifndef _LOG_UTILS_H_
|
LogUtils.cpp
#include "LogUtils.h"
|
LogTracer.h
#ifndef _LOG_TRACER_H_
|