简介
关于log4cpp的介绍与好处就不再赘言了,百度一搜一大把。主要是对于log4cpp的使用如果不封装一下,感觉还是挺麻烦的,例如不少函数名挺长的。所以自己动手把它的日常使用进行了封装,可以让使用log4cpp就像调用一句printf()函数一样简单快捷。
封装目标
- 不需要用一次就调用一次getInstance,只需要在main文件中引入一次即可
- 封装成需要使用时只需简短的一举logError(“somelog”) 就搞定
- 输出的日志内容包含:文件名,函数名,行号(通过以上函数调用即可)
- 利用单例模式封装
具体实现
类定义 & 宏定义
巧妙的使用宏定义可以缩短函数调用形式(虽然effective c++ 和google C++编程规范都极力反对使用太多宏)
#ifndef _MYLOG_H
#define _MYLOG_H
#include<log4cpp/Category.hh>
#include<iostream>
//日志优先级
enum Priority {
ERROR,
WARN,
INFO,
DEBUG
};
//用单例模式封装log4cpp
class Mylog {
public:
static Mylog& getInstance();
static void destory();
void setPriority(Priority priority);
void error(const char* msg);
void warn(const char* msg);
void info(const char* msg);
void debug(const char* msg);
private:
Mylog(); //单例模式:构造函数私有化
private:
static Mylog *plog_;
log4cpp::Category &category_ref_;
};
//*****************************************************
//注意:
//文件名 __FILE__ ,函数名 __func__ ,行号__LINE__ 是编译器实现的
//并非C++头文件中定义的
//前两个变量是string类型,且__LINE__是整形,所以需要转为string类型
//******************************************************
//整数类型文件行号 ->转换为string类型
inline std::string int2string(int line) {