參考文章:
1、常用C++庫(1)日志庫 https://blog.csdn.net/qilimi1053620912/article/details/87378707
2、一步步入門log4cpp https://www.cnblogs.com/happyamyhope/p/6872485.html
3、中文文檔:便利的開發工具-log4cpp快速使用指南
使用測試:
下載源代碼后用cmake生成vs2017工程,然后就可以編譯為log4cpp.lib靜態庫。也可以用自帶的msvc工程編譯(默認win32,比較麻煩),里面有各種例子和編譯為靜態庫,動態庫
我用生成的vs2017工程編譯后的靜態庫在使用時無法使用配置文件方式,可能是編譯有問題,暫未找到原因,只能在代碼中配置布局,參照上面兩位的demo
//FileAppenderExam #include <iostream> #include <log4cpp/Category.hh> #include <log4cpp/Appender.hh> #include <log4cpp/FileAppender.hh> #include <log4cpp/Priority.hh> #include <log4cpp/PatternLayout.hh> #include <log4cpp/RollingFileAppender.hh> using namespace std; // 本示例對同一個category root以不同的布局layout分別輸出到兩個appender // 注意: // 配置文件的形式在這里無法使用,只能手動在代碼里面配置 // log4cpp::PropertyConfigurator::configure(initfilename); int main(int argc, char* argv[]) { log4cpp::PatternLayout* pLayout1 = new log4cpp::PatternLayout();//創建一個Layout; pLayout1->setConversionPattern("%d: %p %c %x: %m%n"); //指定布局格式; // %p:級別,%d:日期,%c:生產者標志,%m%n:內容 log4cpp::PatternLayout* pLayout2 = new log4cpp::PatternLayout(); pLayout2->setConversionPattern("[%p] %d{%Y-%m-%d %H:%M:%S.%l} (%c): %m%n"); // [%p] %d{%H:%M:%S.%l} (%c): %m%n log4cpp::Appender* fileAppender = new log4cpp::FileAppender("fileAppender", "wxb.log");//創建一個Appender; fileAppender->setLayout(pLayout1);//將指定的Layout添加到Appender; log4cpp::RollingFileAppender* rollfileAppender = new log4cpp::RollingFileAppender( "rollfileAppender", "rollwxb.log", 5 * 1024, 1); // 超過5k自動回滾,最大文件數為1 rollfileAppender->setLayout(pLayout2); log4cpp::Category& root = log4cpp::Category::getRoot().getInstance("RootName");//從系統中得到Category的根; root.addAppender(fileAppender);//將Appender添加到Category; root.addAppender(rollfileAppender); root.setPriority(log4cpp::Priority::DEBUG);//設置Category的優先級; //開始記錄日志; for (int i = 0; i < 100; i++) { string strError; ostringstream oss; oss << i << ":Root Error Message!"; strError = oss.str(); root.error(strError); } log4cpp::Category::shutdown();//關閉Category; return 0; }
上面的代碼分別寫入兩個日志文件,一個追加,一個回滾。
基本概念和用法了解后就可以參照示例自己封裝一下。