C++日志库log4cplus的使用详解

 更新时间:2023年03月01日 10:03:04   作者:小小码农Come on  
C++实现的log4cplus日志库是一种易于使用的C ++日志记录API,可提供线程安全,灵活且任意粒度的日志管理和配置控制。这篇文章就来和大家讲讲log4cplus的使用吧

项目中需要打印log,方便程序调试和问题定位分析。C++实现的log4cplus日志库是一种易于使用的C ++日志记录API,可提供线程安全,灵活且任意粒度的日志管理和配置控制。

下面介绍一下在linux中安装log4cplus库过程

下载地址:https://github.com/log4cplus/log4cplus/releases

我选择的是比较新的版本(V2.1.0)

编译&&安装

下载完成在ubuntn中解压&&编译

(使用默认参数和路径)

1、sudo ./configure

2、sudo make

3、sudo make install

(安装完成后头文件路径默认在/usr/loca/include,库文件路径在/usr/local/lib)

4、把库文件路径加入到/etc//etc/ld.so.conf文件中然后执行sudo ldconfig

编写demo

测试需要四个文件,是 MyLogger.h , main.cpp , logconfig.property , CMakeLists.txt (用cmake编译时可用) ,文件内容如下,放入同一个文件夹进行编译

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})    #指定要链接的库文件的路径,一般不需要
# 将第三方的库链接到可执行文件,静态链接
LINK_LIBRARIES(log4cplus)

# 指定源文件
SET(SRC_LIST "main.cpp")
MESSAGE(STATUS "SRC_LIST :" ${SRC_LIST})

# 指定生成目标
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})

# 将第三方的库链接到可执行文件,动态链接
#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 //创建工作目录
cd workspace && 创建4个新文件
mkdir build/install -p
cd build
cmake …/
make
make install

到此这篇关于C++日志库log4cplus的使用详解的文章就介绍到这了,更多相关C++日志库log4cplus内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现bmp图像平移操作

    C语言实现bmp图像平移操作

    这篇文章主要为大家详细介绍了C语言实现bmp图像平移操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C++ 超详细分析多态的原理与实现

    C++ 超详细分析多态的原理与实现

    这篇文章主要介绍了C++多态的原理与实现,多态是一种面向对象的设计思路,本身和C++不是强绑定的,其他语言当中一样有多态,只不过实现的方式可能有所不同。下面来一起了解更多详细内容吧
    2022-03-03
  • C语言三子棋一步步实现详程

    C语言三子棋一步步实现详程

    三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了,想用c语言做出这个游戏,事实上也是比较简单的,下面通过c语言进行对五子棋的分析
    2022-02-02
  • C语言实现访问及查询MySQL数据库的方法

    C语言实现访问及查询MySQL数据库的方法

    这篇文章主要介绍了C语言实现访问及查询MySQL数据库的方法,涉及C语言基于libmysql.lib实现访问MySQL数据库的相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • C语言中时间戳转换成时间字符串的方法

    C语言中时间戳转换成时间字符串的方法

    在PE格式里有个字段是文件的创建时间戳,我想把转成字符串,今天小编给大家分享一段代码,可以比较直观的看出,需要的的朋友参考下
    2017-02-02
  • 详细解析C语言中的开方实现

    详细解析C语言中的开方实现

    这篇文章主要介绍了详细解析C语言中的开方实现,包括一道要求精度的整数开方的题目,需要的朋友可以参考下
    2015-08-08
  • 汇编语言rep movsd 的使用详解

    汇编语言rep movsd 的使用详解

    rep movsd 每次ecx!=0便执行movsd ,然后ecx=ecx-1 movsd移动ds:[si] 到es:[di],在32位汇编下可以用esi代替si,edi代替di
    2013-09-09
  • 总结一次C++ 程序优化历程

    总结一次C++ 程序优化历程

    这篇文章主要记录了一次C++程序优化的历程,给大家优化C++程序一些启发,感兴趣的朋友可以了解下
    2020-09-09
  • C++实现骑士走棋盘算法

    C++实现骑士走棋盘算法

    这篇文章主要为大家详细介绍了C++实现骑士走棋盘算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++ boost scoped_ptr智能指针详解

    C++ boost scoped_ptr智能指针详解

    智能指针是一种像指针的C++对象,但它能够在对象不使用的时候自己销毁掉。虽然STL提供了auto_ptr,但是由于不能同容器一起使用(不支持拷贝和赋值操作),因此很少有人使用。它是Boost各组件中,应用最为广泛的一个
    2022-11-11

最新评论