C++日志庫log4cplus的使用詳解
項目中需要打印log,方便程序調(diào)試和問題定位分析。C++實現(xiàn)的log4cplus日志庫是一種易于使用的C ++日志記錄API,可提供線程安全,靈活且任意粒度的日志管理和配置控制。
下面介紹一下在linux中安裝log4cplus庫過程
下載地址:https://github.com/log4cplus/log4cplus/releases
我選擇的是比較新的版本(V2.1.0)
編譯&&安裝
下載完成在ubuntn中解壓&&編譯
(使用默認參數(shù)和路徑)
1、sudo ./configure
2、sudo make
3、sudo make install
(安裝完成后頭文件路徑默認在/usr/loca/include,庫文件路徑在/usr/local/lib)
4、把庫文件路徑加入到/etc//etc/ld.so.conf文件中然后執(zhí)行sudo ldconfig
編寫demo
測試需要四個文件,是 MyLogger.h , main.cpp , logconfig.property , CMakeLists.txt (用cmake編譯時可用) ,文件內(nèi)容如下,放入同一個文件夾進行編譯
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 最低版本號要求 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # 項目名 PROJECT(LOG) # 添加第三方的庫 SET(INC_DIR "/usr/local/include/") SET(LINK_DIR "/usr/local/lib") INCLUDE_DIRECTORIES(${INC_DIR}) # 設置頭文件搜索路徑 LINK_DIRECTORIES(${LINK_DIR}) #指定要鏈接的庫文件的路徑,一般不需要 # 將第三方的庫鏈接到可執(zhí)行文件,靜態(tài)鏈接 LINK_LIBRARIES(log4cplus) # 指定源文件 SET(SRC_LIST "main.cpp") MESSAGE(STATUS "SRC_LIST :" ${SRC_LIST}) # 指定生成目標 ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST}) # 將第三方的庫鏈接到可執(zhí)行文件,動態(tài)鏈接 #TARGET_LINK_LIBRARIES(${PROJECT_NAME} log4cplus) # 安裝目標文件 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進行編譯
mkdir workspace //創(chuàng)建工作目錄
cd workspace && 創(chuàng)建4個新文件
mkdir build/install -p
cd build
cmake …/
make
make install
到此這篇關(guān)于C++日志庫log4cplus的使用詳解的文章就介紹到這了,更多相關(guān)C++日志庫log4cplus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c++類的隱式轉(zhuǎn)換與強制轉(zhuǎn)換重載詳解
轉(zhuǎn)換函數(shù)的名稱是類型轉(zhuǎn)換的目標類型,因此,不必再為它指定返回值類型;轉(zhuǎn)換函數(shù)是被用于本類型的數(shù)值或變量轉(zhuǎn)換為其他的類型,也不必帶參數(shù)2013-09-09C語言中settimeofday函數(shù)和gettimeofday函數(shù)的使用
這篇文章主要介紹了C語言中的settimeofday函數(shù)和gettimeofday函數(shù)的使用,注意settimeofday()函數(shù)只返回0和-1,需要的朋友可以參考下2015-08-08C++ Opencv自寫函數(shù)實現(xiàn)膨脹腐蝕處理技巧
這篇文章主要介紹了C++ Opencv 自寫函數(shù)實現(xiàn)膨脹腐蝕處理,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10Visual?Studio?2022下載及配置OpenCV4.5.5的詳細過程
這篇文章主要介紹了Visual?Studio?2022下載及配置OpenCV4.5.5的詳細過程,在這里注意下Win10的64位操作系統(tǒng),在OpenCV官網(wǎng)下載OpenCV4.5.5,安裝的是Win?pack,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下2022-05-05