注意:最新版本在https://github.com/ywsswy/ylog
【自己編寫的 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】