【自己编写的 C++ 轻量级日志类(兼容linux、vc++6.0、vs2003、vs2010)】
先来看效果:
【测试文件:main.cpp】
1 /* 2 # 本日志类特点 3 4 * 小巧可爱,全程序(YLog.h)仅60多行,使用方便。 5 * 不定义宏,全局变量等,减少污染,低碳环保。 6 * 使用标准库,兼容windows和linux平台。 7 * 多线程安全。(但低本版编译器如 vc++6.0 会使用localtime等线程不安全的函数) 8 * 可输出每条日志信息的日志级别、输出时间、所在程序文件名、所在代码行数、日志信息。 9 10 # 使用介绍 11 12 构造函数为 YLog(const int level, const std::string &logfile, const int type = YLog::OVER); 13 level:指定日志级别下限,ERROR级别(YLog::ERROR)或INFO级别(YLog::INFO),仅当调用日志输出函数的输出级别达到定义下限级别时才会往日志文件中写日志。(例如,下限定义成YLog::ERROR,那么所有 INFO 级别的信息将不会写入日志文件) 14 logfile:指定输出日志文件名。(如果含路径,请保证路径文件夹存在) 15 type:指定每一个日志文件的输出方式,每次程序运行追加(YLog::ADD)或覆盖(YLog::OVER)之前的日志文件。 16 17 写日志的函数为 template<typename T> \ 18 void w(const std::string &codefile, const int codeline, \ 19 const int level, const std::string &info, const T &value); 20 codefile:固定使用__FILE__宏表示哪个程序文件输出的日志。 21 codeline:固定使用__LINE__宏表示文件中哪一行代码输出的日志。 22 level:本条信息的级别。(仅当达到下限时才会写入文件) 23 info:string类型的任意信息。 24 value:想写入日志的任意类型的变量的值。(请确保此类型变量重载了'<<'操作符) 25 26 */ 27 #include <iostream> 28 #include <string> 29 #include "YLog.h" 30 int main(){ 31 //创建日志对象log1,如果文件存在则追加,日志输出下限级别为INFO级别 32 YLog log1(YLog::INFO, "log1.txt", YLog::ADD); 33 //创建日志对象log2,如果文件存在则覆盖,日志输出下限级别为ERROR级别 34 YLog log2(YLog::ERROR, "log2.txt", YLog::OVER); 35 int a = 520; 36 double b = 13.14; 37 std::string c = "I love U."; 38 39 log1.w(__FILE__, __LINE__, YLog::INFO, "watch_a",a);//INFO级别不低于log1的下限INFO级别,正常写入日志文件 40 log1.w(__FILE__, __LINE__, YLog::ERROR, "Watch_b",b);//正常写入 41 log1.w(__FILE__, __LINE__, YLog::INFO, "watch_c",c);//正常写入 42 43 log2.w(__FILE__, __LINE__, YLog::INFO, "watch_a",a);//INFO级别低于log2的下限ERROR级别,不写入日志 44 log2.w(__FILE__, __LINE__, YLog::ERROR, "Watch_b",b);//正常写入 45 log2.w(__FILE__, __LINE__, YLog::INFO, "watch_c",c);//不写入日志 46 return 0; 47 }
【输出日志1:log1.txt】
【输出日志2:log2.txt】
【附:旧版(仅支持windows,实现了可变参数)下载链接http://download.csdn.net/detail/yws_swy/9886382】
【新版本代码链接https://github.com/ywsswy/YLog】