zoukankan      html  css  js  c++  java
  • Log4Qt 使用(一)

    一、下载

      http://sourceforge.net/projects/log4qt/develop

    二、Log4Qt介绍

      Log4Qt 是Apache Log4J 的Qt移植版,所以看Log4J的资料应该是最直接有效的(因为Log4Qt的直接资料太少了)。

      Log4Qt主要是用来记录日志(有助于程序调试)。有3个主要的组件:

      Logger
    提供日志记录服务,可以有多个Logger存在,每个有它们自己的名字。Logger间存在隶属关系,有一个Logger称为根Logger。
      Appender
    用来指明将日志记录到什么地方:比如,控制台、文件、数据库,等等
      Layout
    控制日志的输出格式,可以类比一下C中的printf哈。

    三、使用Log4Qt

      由于程序中包含很多动态库,而几乎每个动态库都需要使用log功能,此时直接包含Log4Qt的源码或者使用静态库都不是太好的注意。所以:使用动态库

      其实只要写好工程文件,使用动态库也很简单:

      3.1 创建Qt工程,命名为libLog4Qt

      3.2 在项目根目录下新建文件夹3rdparty,并把下载的源代码中的放置在里面。

      3.3 编辑libLog4Qt.pro内容如下:

      目的:构建一个动态库

    TEMPLATE = lib
    CONFIG += log4qt-buildlib
    QT += core xml network
    
    include(liblog4qt.pri)
    TARGET = $$LIBLOG4QT_NAME
    DESTDIR = $$PROJECT_LIBDIR
    win32{
        DLLDESTDIR = $$PROJECT_BINDIR
        QMAKE_DISTCLEAN += $$PROJECT_BINDIR/$${LIBLOG4QT_NAME}.dll
    }
    CONFIG += debug_and_release build_all
    
    LOG4QT_VERSION_MAJOR = 1
    LOG4QT_VERSION_MINOR = 0
    LOG4QT_VERSION_RELEASE = 0
    
    LOG4QT_VERSION = '\"$${LOG4QT_VERSION_MAJOR}.$${LOG4QT_VERSION_MINOR}.$${LOG4QT_VERSION_RELEASE}\"'
    DEFINES += LOG4QT_VERSION_STR="$${LOG4QT_VERSION}"
    DEFINES += LOG4QT_VERSION=$${LOG4QT_VERSION}
    
    VERSION = 1.0.0
    
    DEPENDPATH += src src/helpers src/spisrc/ varia
    INCLUDEPATH += src src/helpers src/spi src/varia

      3.4 在以上创建的工程根目录下创建文档 libLog4Qt.pri

      编辑 libLog4Qt.pri如下:

      一开始定义几个变量:

    • 我们下载的 log4qt 所放置的目录
    • 我们的库文件准备放置到的路径(所有的动态库都需要这个,放置到单独一个common.pri中更好)
    • 库文件的名字(使用了qtLibraryTarget,这样在windows下debug和release自动拥有不同的名字,而且对我们是透明的,因为我们只在这一个文件内指定库文件的名字。)
    LOG4QTSRCPATH = $$PWD/3rdparty/log4qt/src/log4qt
    PROJECT_LIBDIR = $$PWD/lib
    PROJECT_BINDIR = $$PWD/bin
    
    TEMPLATE += fakelib
    LIBLOG4QT_NAME = $$qtLibraryTarget(hlog4qt)
    TEMPLATE -= fakelib
    
    INCLUDEPATH += $$LOG4QTSRCPATH
    DEPENDPATH += $$LOG4QTSRCPATH
    
    !log4qt-buildlib{
        DEFINES += LOG4QT_IMPORTS
        LIBS +=  -L$$PROJECT_LIBDIR  -l$$LIBLOG4QT_NAME
    }else{
        DEFINES += LOG4QT_EXPORTS
        INCLUDEPATH += -L$$PROJECT_LIBDIR $$LOG4QTSRCPATH/helpers 
                       $$LOG4QTSRCPATH/spi 
                       $$LOG4QTSRCPATH/varia
        DEPENDPATH += $$LOG4QTSRCPATH/helpers 
                       $$LOG4QTSRCPATH/spi 
                       $$LOG4QTSRCPATH/varia
        include($$LOG4QTSRCPATH/Log4Qt.pri)
    }

    创建libLog4Qt.pro

    用来构建动态库

    可以单独存在,也可以被上级的pro文件所包含(通过subdir)

    创建libLog4Qt.pri

    用来构建和使用动态库

    任何需要使用log工程的pro文件,只需要include该文件即可

      3.5 编译项目,我们可以在lib目录下看到四个文件:

      libhlog4qt.so   libhlog4qt.so.1     libhlog4qt.so.1.0      libhlog4qt.so.1.0.0

      这表明我们已经成功构建来关于Log4Qt的动态库了。

      下面,我们就可以使用上面生成的动态库。

      3.6 我们在新项目中使用以上动态库需要做的事情:

      在.pro中加入:

    LIBS += -L$$PWD/3rdParty/lib/ -lhlog4qt
    
    INCLUDEPATH += $$PWD/3rdParty
    DEPENDPATH += $$PWD/3rdParty

      并在使用前包含头文件和使用log:

      

    #include "logger.h"
    #include "basicconfigurator.h"
    
    
    
    
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        Log4Qt::BasicConfigurator::configure();
        Log4Qt::Logger * log = Log4Qt::Logger::rootLogger();
        log->debug("Hello DbZhang800!");
        log->info("Hello Qt!");
        log->warn("Hello 1+1=2");
        return 0;
    }

    至此,我们已可以成功使用Log4Qt了。

  • 相关阅读:
    简述拦截器的工作原理?
    线程安全与非线程安全集合说一下,底层怎么实现的(hashmap,concurrenthashmap)
    表与表之间的关联关系
    手写9x9乘法表,冒泡排序
    主键和外键的区别
    为什么要使用连接池?
    AXI协议中的模棱两可的含义的解释(Cachable和Bufferable)
    ahb时序解析
    amba web
    Register Abstraction(9)
  • 原文地址:https://www.cnblogs.com/wiessharling/p/3712578.html
Copyright © 2011-2022 走看看