C++日志庫(kù)log4cplus的使用詳解
項(xiàng)目中需要打印log,方便程序調(diào)試和問(wèn)題定位分析。C++實(shí)現(xiàn)的log4cplus日志庫(kù)是一種易于使用的C ++日志記錄API,可提供線程安全,靈活且任意粒度的日志管理和配置控制。
下面介紹一下在linux中安裝log4cplus庫(kù)過(guò)程
下載地址:https://github.com/log4cplus/log4cplus/releases
我選擇的是比較新的版本(V2.1.0)
編譯&&安裝
下載完成在ubuntn中解壓&&編譯
(使用默認(rèn)參數(shù)和路徑)
1、sudo ./configure
2、sudo make
3、sudo make install
(安裝完成后頭文件路徑默認(rèn)在/usr/loca/include,庫(kù)文件路徑在/usr/local/lib)
4、把庫(kù)文件路徑加入到/etc//etc/ld.so.conf文件中然后執(zhí)行sudo ldconfig
編寫demo
測(cè)試需要四個(gè)文件,是 MyLogger.h , main.cpp , logconfig.property , CMakeLists.txt (用cmake編譯時(shí)可用) ,文件內(nèi)容如下,放入同一個(gè)文件夾進(jìn)行編譯
MyLogger.h
#include <log4cplus/logger.h> #include <log4cplus/configurator.h> #include <log4cplus/layout.h> #include <log4cplus/loggingmacros.h> #include <log4cplus/helpers/stringhelper.h> #define MY_LOG_FILE_PATH "logconfig.property" class MyLogger { private: MyLogger() { log4cplus::initialize(); log4cplus::PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT(MY_LOG_FILE_PATH)); m_rootLog = log4cplus::Logger::getRoot(); m_loggerYW = log4cplus::Logger::getInstance("loggerYW"); m_loggerWJ = log4cplus::Logger::getInstance("loggerWJ"); m_loggerUI = log4cplus::Logger::getInstance("loggerUI"); } ~MyLogger() { if (m_logger) { delete m_logger; } } static MyLogger* m_logger; public: static MyLogger * getInstance() { if (m_logger == NULL) { m_logger = new MyLogger(); } return m_logger; } log4cplus::Logger m_rootLog; log4cplus::Logger m_loggerYW; log4cplus::Logger m_loggerWJ; log4cplus::Logger m_loggerUI; }; MyLogger* MyLogger::m_logger = NULL;
main.cpp
#include "MyLogger.h" int main(int argc, char *argv[]) { MyLogger * myLoger = NULL; myLoger = MyLogger::getInstance(); LOG4CPLUS_FATAL(myLoger->m_loggerYW, "DeleteService failed,errCode=[" << 2 << "]"); LOG4CPLUS_DEBUG(myLoger->m_loggerWJ, " Service is removed"); LOG4CPLUS_DEBUG(myLoger->m_loggerUI, " Service "); return 0; }
logconfig.property
log4cplus.rootLogger=DEBUG,rootLogger log4cplus.appender.rootLogger=log4cplus::RollingFileAppender #log4cplus.appender.rootLogger=log4cplus::ConsoleAppender log4cplus.appender.rootLogger.MaxFileSize=100MB log4cplus.appender.rootLogger.MaxBackupIndex=2 log4cplus.appender.rootLogger.File=rootLogger.log log4cplus.appender.rootLogger.layout=log4cplus::PatternLayout log4cplus.appender.rootLogger.layout.ConversionPattern=%D:%d{%Q}|%p|%t|%l|%m|%n log4cplus.appender.rootLogger.filters.1=log4cplus::spi::LogLevelRangeFilter log4cplus.appender.rootLogger.filters.1.LogLevelMin=TRACE log4cplus.appender.rootLogger.filters.1.LogLevelMax=FATAL log4cplus.appender.rootLogger.filters.1.AcceptOnMatch=true log4cplus.appender.rootLogger.filters.2=log4cplus::spi::DenyAllFilter log4cplus.logger.loggerYW=DEBUG,loggerYW log4cplus.appender.loggerYW=log4cplus::RollingFileAppender log4cplus.appender.loggerYW.File=loggerYW.log log4cplus.appender.loggerYW.layout=log4cplus::PatternLayout log4cplus.appender.loggerYW.layout.ConversionPattern=%D:%d{%Q}|%p|%t|%l|%m|%n log4cplus.appender.loggerYW.filters.1=log4cplus::spi::LogLevelRangeFilter log4cplus.appender.loggerYW.filters.1.LogLevelMin=TRACE log4cplus.appender.loggerYW.filters.1.LogLevelMax=FATAL log4cplus.appender.loggerYW.filters.1.AcceptOnMatch=true log4cplus.appender.loggerYW.filters.2=log4cplus::spi::DenyAllFilter log4cplus.appender.loggerYW.MaxFileSize=100MB log4cplus.appender.loggerYW.MaxBackupIndex=2 log4cplus.additivity.loggerYW=false log4cplus.logger.loggerWJ=DEBUG,loggerWJ log4cplus.appender.loggerWJ=log4cplus::RollingFileAppender log4cplus.appender.loggerWJ.File=loggerWJ.log log4cplus.appender.loggerWJ.layout=log4cplus::PatternLayout log4cplus.appender.loggerWJ.layout.ConversionPattern=%D:%d{%Q}|%p|%t|%l|%m|%n log4cplus.appender.loggerWJ.filters.1=log4cplus::spi::LogLevelRangeFilter log4cplus.appender.loggerWJ.filters.1.LogLevelMin=TRACE log4cplus.appender.loggerWJ.filters.1.LogLevelMax=FATAL log4cplus.appender.loggerWJ.filters.1.AcceptOnMatch=true log4cplus.appender.loggerWJ.filters.2=log4cplus::spi::DenyAllFilter log4cplus.appender.loggerWJ.MaxFileSize=100MB log4cplus.appender.loggerWJ.MaxBackupIndex=2 log4cplus.additivity.loggerWJ=false log4cplus.logger.loggerUI=DEBUG,loggerUI log4cplus.appender.loggerUI=log4cplus::RollingFileAppender log4cplus.appender.loggerUI.File=loggerUI.log log4cplus.appender.loggerUI.layout=log4cplus::PatternLayout log4cplus.appender.loggerUI.layout.ConversionPattern=%D:%d{%Q}|%p|%t|%l|%m|%n log4cplus.appender.loggerUI.filters.1=log4cplus::spi::LogLevelRangeFilter log4cplus.appender.loggerUI.filters.1.LogLevelMin=TRACE log4cplus.appender.loggerUI.filters.1.LogLevelMax=FATAL log4cplus.appender.loggerUI.filters.1.AcceptOnMatch=true log4cplus.appender.loggerUI.filters.2=log4cplus::spi::DenyAllFilter log4cplus.appender.loggerUI.MaxFileSize=100MB log4cplus.appender.loggerUI.MaxBackupIndex=2 log4cplus.additivity.loggerUI=false
CMakeLists.txt
# CMake 最低版本號(hào)要求 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # 項(xiàng)目名 PROJECT(LOG) # 添加第三方的庫(kù) SET(INC_DIR "/usr/local/include/") SET(LINK_DIR "/usr/local/lib") INCLUDE_DIRECTORIES(${INC_DIR}) # 設(shè)置頭文件搜索路徑 LINK_DIRECTORIES(${LINK_DIR}) #指定要鏈接的庫(kù)文件的路徑,一般不需要 # 將第三方的庫(kù)鏈接到可執(zhí)行文件,靜態(tài)鏈接 LINK_LIBRARIES(log4cplus) # 指定源文件 SET(SRC_LIST "main.cpp") MESSAGE(STATUS "SRC_LIST :" ${SRC_LIST}) # 指定生成目標(biāo) ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST}) # 將第三方的庫(kù)鏈接到可執(zhí)行文件,動(dòng)態(tài)鏈接 #TARGET_LINK_LIBRARIES(${PROJECT_NAME} log4cplus) # 安裝目標(biāo)文件 SET(PROJECT_INSTALL_PREFIX "/mnt/hgfs/VM_Shared/Teselog4cplus/build/dd") INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${PROJECT_INSTALL_PREFIX} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) # 安裝配置文件 SET(CONFIG_INSTALL_PREFIX "/mnt/hgfs/VM_Shared/Teselog4cplus/build") INSTALL(FILES logconfig.property DESTINATION ${CONFIG_INSTALL_PREFIX})
用cmake進(jìn)行編譯
mkdir workspace //創(chuàng)建工作目錄
cd workspace && 創(chuàng)建4個(gè)新文件
mkdir build/install -p
cd build
cmake …/
make
make install
到此這篇關(guān)于C++日志庫(kù)log4cplus的使用詳解的文章就介紹到這了,更多相關(guān)C++日志庫(kù)log4cplus內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Cocos2d-x學(xué)習(xí)筆記之Hello World源碼分析
這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之Hello World源碼分析,接上一篇內(nèi)容,本文著重分析源碼文件,需要的朋友可以參考下2014-09-09C++解決大數(shù)組棧內(nèi)存不夠問(wèn)題的方法分析
這篇文章主要介紹了C++解決大數(shù)組棧內(nèi)存不夠問(wèn)題的方法,結(jié)合實(shí)例形式對(duì)比分析了C++針對(duì)大數(shù)組棧內(nèi)存不足情況的常見(jiàn)解決方法及其優(yōu)缺點(diǎn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05C++設(shè)計(jì)模式編程中Facade外觀模式的使用實(shí)例解析
這篇文章主要介紹了C++設(shè)計(jì)模式編程中Facade外觀模式的使用實(shí)例解析,外觀模式的主要用途就是為子系統(tǒng)的復(fù)雜處理過(guò)程提供方便的調(diào)用方法,需要的朋友可以參考下2016-03-03C++實(shí)現(xiàn)紅黑樹核心插入實(shí)例代碼
紅黑樹是一種二叉搜索樹,但在每個(gè)結(jié)點(diǎn)上增加一個(gè)存儲(chǔ)位表示結(jié)點(diǎn)的顏色,可以是Red或Black,下面這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)紅黑樹核心插入的相關(guān)資料,需要的朋友可以參考下2023-06-06C++實(shí)現(xiàn)將數(shù)據(jù)寫入Excel工作表的示例代碼
直觀的界面、出色的計(jì)算功能和圖表工具,使Excel成為最流行的個(gè)人計(jì)算機(jī)數(shù)據(jù)處理軟件。在本文中,您將學(xué)習(xí)如何使用?Spire.XLS?for?C++?創(chuàng)建?Excel?文檔,以及如何將數(shù)據(jù)寫入?Excel?工作表2023-03-03C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲源碼
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Linux下實(shí)現(xiàn)C++操作Mysql數(shù)據(jù)庫(kù)
由于工作需要抽出一周的時(shí)間來(lái)研究C/C++訪問(wèn)各種數(shù)據(jù)庫(kù)的方法,并打算封裝一套數(shù)據(jù)庫(kù)操作類,現(xiàn)在奉上最簡(jiǎn)單的一部分:在Linux下訪問(wèn)MySQL數(shù)據(jù)庫(kù)。2017-05-05