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
編寫(xiě)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)文章
c++類的隱式轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換重載詳解
轉(zhuǎn)換函數(shù)的名稱是類型轉(zhuǎn)換的目標(biāo)類型,因此,不必再為它指定返回值類型;轉(zhuǎn)換函數(shù)是被用于本類型的數(shù)值或變量轉(zhuǎn)換為其他的類型,也不必帶參數(shù)2013-09-09
C語(yǔ)言中settimeofday函數(shù)和gettimeofday函數(shù)的使用
這篇文章主要介紹了C語(yǔ)言中的settimeofday函數(shù)和gettimeofday函數(shù)的使用,注意settimeofday()函數(shù)只返回0和-1,需要的朋友可以參考下2015-08-08
C++ Opencv自寫(xiě)函數(shù)實(shí)現(xiàn)膨脹腐蝕處理技巧
這篇文章主要介紹了C++ Opencv 自寫(xiě)函數(shù)實(shí)現(xiàn)膨脹腐蝕處理,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
C語(yǔ)言之循環(huán)語(yǔ)句詳細(xì)介紹
大家好,本篇文章主要講的是C語(yǔ)言之循環(huán)語(yǔ)句詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
C語(yǔ)言中使用lex統(tǒng)計(jì)文本文件字符數(shù)
這篇文章主要介紹了C語(yǔ)言中使用lex統(tǒng)計(jì)文本文件字符數(shù),本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04
Visual?Studio?2022下載及配置OpenCV4.5.5的詳細(xì)過(guò)程
這篇文章主要介紹了Visual?Studio?2022下載及配置OpenCV4.5.5的詳細(xì)過(guò)程,在這里注意下Win10的64位操作系統(tǒng),在OpenCV官網(wǎng)下載OpenCV4.5.5,安裝的是Win?pack,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05

