QT 5.15.2 配置log4cplus-2.0.7

1 篇文章 0 订阅

系列参考文章

log4cplus之基本使用方法及示例
VS2019配置log4cplus
C++ 设计实现日志系统 提示:这篇文章重点看,不错
C++日志库log4cplus快速入门
log4cplus_demo
可以了解make类似的工具Scons



前言

利用Cmake 编译相应的库,从而方便QT MINGW73_64调用,MSVC 编译器同理


一、准备

  1. log3.0以上版本,编译器版本要支持c++17

  2. 安装cmake (cmake3.21.3版本)

  3. github下载文件Catch-master.zipThreadPool-master.zip log4cplus-2.0.7

  4. 其他下载链接官方文档

二、编译步骤

1. 建立Cmake编译输出目录log4cplus

将Catch-master.zip和ThreadPool-master.zip分别解压到log4cplus源码下catch和threadpool目录在这里插入图片描述

2. 设置环境变量

一个是QT 的mingw以及cmake的

在这里插入图片描述

3. 设置编译器

3.1 configure->选择编译器为MinGW Makefiles

在这里插入图片描述

3.2 点击下一步,选择好对应的gcc,g++编译器;

D:/Qt/Qt5.12.11/Tools/mingw730_64/bin/gcc.exe
D:/Qt/Qt5.12.11/Tools/mingw730_64/bin/g++.exe
在这里插入图片描述

4. Configure配置选项

勾选LOG4CPLUS_QT5,并设置好Qt5Core_DIR,然后点击Configure->Generate
在这里插入图片描述

5. 编译

上一步没报错就用mingw32-make编译,用管理员权限打开PowerShell
在这里插入图片描述
在这里插入图片描述

三、使用步骤

1.测试库

说明:把log4cplus下bin目录生成的库文件liblog4cplusU.dll, liblog4cplusqt5debugappenderU.dll拷贝到测试工程

如果要使用qt5debugappender,请把 liblog4cplusqt5debugappenderU.dll 和
liblog4cplusqt5debugappenderU.dll.a 也加到LIBS中来

INCLUDEPATH += $$PWD\3rdparty\include
LIBS += -L$$PWD\3rdparty\libs\ -lliblog4cplusU

2.配置文件

配置文件log.properties控制日志文件的生成,写个单例日志类读取配置文件

# ALL TRACE  DEBUG  INFO  WARN  ERROR  FATAL  OFF
log4cplus.rootLogger = TRACE,SA
log4cplus.logger.logConsole = TRACE,LC

#For database stuff, I don't need to logging everything, it's enough printing only errors!
#log4cplus.logger.DatabaseOperations=ERROR
#log4cplus.additivity.file=false

log4cplus.appender.LC=log4cplus::ConsoleAppender
log4cplus.appender.LC.EnCoding=utf-8
log4cplus.appender.LC.layout=log4cplus::PatternLayout
log4cplus.appender.LC.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %m [%l]%n
 
#设置日志追加到文件尾
log4cplus.appender.SA=log4cplus::TimeBasedRollingFileAppender 
log4cplus.appender.SA.File = Mylogger.log
# 必须要先手动创建好log目录;否则无法创建文件
log4cplus.appender.SA.FilenamePattern= ./log/%d{yyyy-MM-dd_HH-mm}.log
log4cplus.appender.SA.Schedule = MINUTELY
log4cplus.appender.SA.CreateDirs = true
log4cplus.appender.SA.MaxHistory = 9999
log4cplus.appender.SA.RollOnClose = false
#设置日志文件大小
log4cplus.appender.SA.MaxFileSize = 100MB
#设置生成日志最大个数
log4cplus.appender.SA.MaxBackupIndex = 100
log4cplus.appender.SA.Append = true
log4cplus.appender.SA.layout=log4cplus::PatternLayout
log4cplus.appender.SA.layout.ConversionPattern=[%-5p][%D{%m/%d/%y %H:%M:%S:%Q}] [%t] %c - %m [%l]%n
 
#设置日志级别范围
log4cplus.appender.SA.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.SA.filters.1.LogLevelMin=DEBUG
log4cplus.appender.SA.filters.1.LogLevelMax=FATAL
log4cplus.appender.SA.filters.1.AcceptOnMatch=true
log4cplus.appender.SA.filters.2=log4cplus::spi::DenyAllFilter

3. 单列日志类

MyLogger.h

#ifndef MYLOGGER_H
#define MYLOGGER_H
#include <iostream>
#include <string>
#include <mutex>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/logger.h>
#include <log4cplus/initializer.h>
#include <log4cplus/log4cplus.h>
#include <log4cplus/fileappender.h>
#include <log4cplus/consoleappender.h>
#include <log4cplus/layout.h>
#include <log4cplus/tchar.h>
#include <log4Cplus/configurator.h>
#include <log4Cplus/loggingmacros.h>
#include <log4Cplus/helpers/stringhelper.h>

#define MY_LOG_FILE "log.properties"


using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;
//懒汉单列模式
class MyLogger
{
public:
    static MyLogger* getInstace();
    //static void deleteInstance();
    Logger logger;
    Logger console;
private:
     MyLogger();
     ~MyLogger(){
       cout << "Destory singleton for log4cplus!!" <<endl;
     }
     static MyLogger *m_logger;
     static mutex myMutex;
private:
     //内部类来删除对象
     class Garbo{
       public:
         Garbo(){}
         ~Garbo(){
             if(m_logger != NULL){
                 delete m_logger;
                 m_logger = nullptr;
             }
         }
     };
    static Garbo _garbo;
};

#endif // MYLOGGER_H

MyLogger.cpp

#include "mylogger.h"

MyLogger* MyLogger::m_logger = NULL;
mutex MyLogger::myMutex;
MyLogger::Garbo MyLogger::_garbo;

MyLogger *MyLogger::getInstace()
{
    if(NULL == m_logger){
        lock_guard<mutex> mg(myMutex);
        if(NULL == m_logger){
             m_logger =new MyLogger;//在堆上建立
        }
    }
    return m_logger;
}

MyLogger::MyLogger()
{
    log4cplus::initialize();
    PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT(MY_LOG_FILE));
    logger  = Logger::getRoot();
    console = Logger::getInstance(LOG4CPLUS_TEXT("logConsole"));
    cout<<"Create Singleton for log4cplus!"<<endl;
}

4. 使用

 MyLogger *pMyLogger = NULL;
 pMyLogger= MyLogger::getInstace();
 LOG4CPLUS_WARN(pMyLogger->logger, LOG4CPLUS_TEXT("Hello, World!"));

5.资源包

这是我编译好的Bin包和相关软件

总结

这是对QT 环境下log4cplus配置的一个说明,以及对log4cplus的一个了解!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值