日志需要按当前设置的级别来控制是否输出到文件或者控制台,这里做一个最简单示范:
随便设置日志级别:
// 切换输出的技巧
enum LogLevel
{
LOGLEVEL_TRACE = 0,
LOGLEVEL_DEBUG,
LOGLEVEL_DETAIL,
LOGLEVEL_INFO,
LOGLEVEL_WARN,
LOGLEVEL_ERROR,
LOGLEVEL_FATAL,
LOGLEVEL_OFF,
};
精心定义一个空的输出:
class nullstream : public std::ostream {
public:
nullstream() : std::ostream(nullptr) {} // results in rdbuf==0 and badbit==true
};
随意添加一些定义和宏:
static nullstream dummyStream;
static int level = LOGLEVEL_INFO;
#define EV_LOG(LEVEL) ((LEVEL < level) ? dummyStream : std::cout) << "file: " << __FILE__ << ", 行:" << __LINE__ << ", 函数:" <<__FUNCTION__ << ",内容:"
#define EV_INFO EV_LOG(LOGLEVEL_INFO)
歌词大意是:如果当前的输出级别小于阈值,就输出到空流,否则输出到默认的输出,并加添加文件,行,函数信息,
使用方法:
string *str = new string[2];
int n = sizeof(string *);
int t = sizeof(str);
int m = sizeof(char);
//std::cout << n << endl;
//EV_INFO << "sizeof(string *)" << n << endl;