log4qt

文章目录


一、log4qt编译

  1. 下载log4qt源码
    1. https://sourceforge.net/projects/log4qt/
    2. https://github.com/devbean/log4qt
    3. https://gitee.com/mirrors/log4qt
  2. 编译源码:
    使用qt打开下载文件的pro文件,选择要编译的环境,在编译器内选中src文件,右键选择运行,编译完成可在编译的文件目录中找到库文件。
    (具体编译方式网上很多,不会的自己找找)

二、使用步骤

1.引入库

在项目文件右键:添加库>>外部库>>浏览(库文件)>>静态>>去掉Linux >>去掉为debug版本添加d作为后缀>>下一步>>完成

2.封装一个线程安全的日志接口

cpp 复制代码
#include <QObject>
#include <QMutex>
#include <QMutexLocker>
#include <QCoreApplication>
#include "log4qt/logger.h"

class LogMaster : public QObject
{
    Q_OBJECT
public:
    explicit LogMaster(QObject *parent = nullptr);

public:
    static LogMaster * instance();
    
signals:

public slots:
	//! 添加日志模块配置文件
    void init(QString configFilePath); 

public slots:
	//! 
    void debug(QString msg);
    void info(QString msg);
    void warn(QString msg);
    void error(QString msg);

private:
    static LogMaster *pInstance;
    static QMutex m_mutex;
    static Log4Qt::Logger * m_pLoggerDebug;
    static Log4Qt::Logger * m_pLoggerInfo;
    static Log4Qt::Logger * m_pLoggerWarn;
    static Log4Qt::Logger * m_pLoggerError;
    static QString m_configFilePath;
};
cpp 复制代码
#include "logmaster.h"
#include <QDebug>
#include "log4qt/propertyconfigurator.h"
#include "log4qt/basicconfigurator.h"

LogMaster * LogMaster::pInstance = 0;
QMutex LogMaster::m_mutex;
Log4Qt::Logger * LogMaster::m_pLoggerDebug = 0;
Log4Qt::Logger * LogMaster::m_pLoggerInfo = 0;
Log4Qt::Logger * LogMaster::m_pLoggerWarn = 0;
Log4Qt::Logger * LogMaster::m_pLoggerError = 0;
QString LogMaster::m_configFilePath;

LogMaster::LogMaster(QObject *parent) : QObject(parent)
{
    // 一定要配置文件,不然运行起来会直接当掉
    Log4Qt::BasicConfigurator::configure();
}

LogMaster *LogMaster::instance()
{
    if(!pInstance)
    {
        QMutexLocker mutexLocker(&m_mutex);
        if(!pInstance)
        {
            LogMaster *p = new LogMaster();
            pInstance = p;
        }
    }
    return pInstance;
}

void LogMaster::init(QString configFilePath)
{
    m_configFilePath = configFilePath;
    Log4Qt::PropertyConfigurator::configure(m_configFilePath);
    m_pLoggerDebug = Log4Qt::Logger::logger("debug");
    m_pLoggerInfo = Log4Qt::Logger::logger("info");
    m_pLoggerWarn = Log4Qt::Logger::logger("warn");
    m_pLoggerError = Log4Qt::Logger::logger("error");
}

void LogMaster::debug(QString msg)
{
    m_pLoggerDebug->debug(msg);
}

void LogMaster::info(QString msg)
{
    m_pLoggerInfo->info(msg);
}

void LogMaster::warn(QString msg)
{
    m_pLoggerWarn->warn(msg);
}

void LogMaster::error(QString msg)
{
    m_pLoggerError->error(msg);
}

3.使用

cpp 复制代码
#include <QApplication>
#include <QTextCodec>
#include <QThread>
#include "logmaster.h"

void init_log_conf()
{
    //
    QDir dir;
    if(!dir.exists("./Conf")) dir.mkdir("./Conf");
    if(!dir.exists(QCoreApplication::applicationDirPath() + "/" +"Conf")) dir.mkdir(QCoreApplication::applicationDirPath() + "/" +"Conf");

    //!
    QFile file(QCoreApplication::applicationDirPath() + "/" +"Conf/log.conf");
    if(!file.exists())
    {
        if(file.open(QIODevice::WriteOnly))
        {
            QString text = "";

            text += "logpath1=./log/debug\r\n";
            text += "logpath2=./log/info\r\n";
            text += "logpath3=./log/warn\r\n";
            text += "logpath4=./log/error\r\n";
            text += "\r\n";
            text += "# 给"LoggerObjectPrio"这个类的Logger定义log输出等级为Error\r\n";
            text += "log4j.logger.LoggerObjectPrio= error, warn, debug, info\r\n";
            text += "\r\n";
            text += "log4j.logger.debug=debug\r\n";
            text += "log4j.appender.debug=org.apache.log4j.DailyFileAppender\r\n";
            text += "log4j.appender.debug.file=${logpath1}/.log\r\n";
            text += "log4j.appender.debug.datePattern=yyyy-MM-dd-Debug\r\n";
            text += "log4j.appender.debug.keepDays=30\r\n";
            text += "log4j.appender.debug.Threshold=DEBUG\r\n";
            text += "log4j.appender.debug.appendFile=true\r\n";
            text += "log4j.appender.debug.Encoding=UTF-8\r\n";
            text += "log4j.appender.debug.layout=org.apache.log4j.PatternLayout\r\n";
            text += "log4j.appender.debug.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss.zzz]} %m%n\r\n";
            text += "\r\n";
            text += "log4j.logger.info=debug,info\r\n";
            text += "log4j.appender.info=org.apache.log4j.DailyFileAppender\r\n";
            text += "log4j.appender.info.file=${logpath2}/.log\r\n";
            text += "log4j.appender.info.datePattern=yyyy-MM-dd-Info\r\n";
            text += "log4j.appender.info.keepDays=30\r\n";
            text += "log4j.appender.info.Threshold=DEBUG\r\n";
            text += "log4j.appender.info.appendFile=true\r\n";
            text += "log4j.appender.info.Encoding=UTF-8\r\n";
            text += "log4j.appender.info.layout=org.apache.log4j.PatternLayout\r\n";
            text += "log4j.appender.info.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss.zzz]} %m%n\r\n";
            text += "\r\n";
            text += "log4j.logger.warn=info,debug,warn\r\n";
            text += "log4j.appender.warn=org.apache.log4j.DailyFileAppender\r\n";
            text += "log4j.appender.warn.file=${logpath3}/.log\r\n";
            text += "log4j.appender.warn.datePattern=yyyy-MM-dd-Warn\r\n";
            text += "log4j.appender.warn.keepDays=30\r\n";
            text += "log4j.appender.warn.Threshold=DEBUG\r\n";
            text += "log4j.appender.warn.appendFile=true\r\n";
            text += "log4j.appender.warn.Encoding=UTF-8\r\n";
            text += "log4j.appender.warn.layout=org.apache.log4j.PatternLayout\r\n";
            text += "log4j.appender.warn.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss.zzz]} %m%n\r\n";
            text += "\r\n";
            text += "log4j.logger.error=info,debug,error\r\n";
            text += "log4j.appender.error=org.apache.log4j.DailyFileAppender\r\n";
            text += "log4j.appender.error.file=${logpath4}/.log\r\n";
            text += "log4j.appender.error.datePattern=yyyy-MM-dd-Error\r\n";
            text += "log4j.appender.error.keepDays=30\r\n";
            text += "log4j.appender.error.Threshold=DEBUG\r\n";
            text += "log4j.appender.error.appendFile=true\r\n";
            text += "log4j.appender.error.Encoding=UTF-8\r\n";
            text += "log4j.appender.error.layout=org.apache.log4j.PatternLayout\r\n";
            text += "log4j.appender.error.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss.zzz]} %m%n\r\n";

            file.write(text.toLatin1());
            file.close();
        }
        else
        {
            QMessageBox::warning(NULL, "log4qt(log.conf)加载失败", file.errorString());
        }
    }
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //! 判断有没有日志配置文件, 没有则生成配置文件
    init_log_conf();
    //! 设置配置文件
    LogMaster::instance()->init(QCoreApplication::applicationDirPath() + "/" +"Conf/log.conf");
    //
    MainWindow w;
    w.show();
    //
    return a.exec();
}

4.日志配置文件

cpp 复制代码
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.RollingFileAppender
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.appendFile=true
log4j.appender.debug.Encoding=UTF-8
log4j.appender.debug.File=log/debug.txt
log4j.appender.debug.MaxFileSize=4096KB
log4j.appender.debug.MaxBackupIndex=7
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss.zzz]} [%t][%p] %m%n

log4j.logger.info=debug,info
log4j.appender.info=org.apache.log4j.RollingFileAppender
log4j.appender.info.Threshold=DEBUG
log4j.appender.info.appendFile=true
log4j.appender.info.Encoding=UTF-8
log4j.appender.info.File=log/info.txt
log4j.appender.info.MaxFileSize=4096KB
log4j.appender.info.MaxBackupIndex=7
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss.zzz]} [%t][%p] %m%n

log4j.logger.warn=info,debug,warn
log4j.appender.warn=org.apache.log4j.RollingFileAppender
log4j.appender.warn.Threshold=DEBUG
log4j.appender.warn.appendFile=true
log4j.appender.warn.Encoding=UTF-8
log4j.appender.warn.File=log/warn.txt
log4j.appender.warn.MaxFileSize=4096KB
log4j.appender.warn.MaxBackupIndex=2
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss.zzz]} [%t][%p] %m%n

log4j.logger.error=info,debug,error
log4j.appender.error=org.apache.log4j.RollingFileAppender
log4j.appender.error.Threshold=DEBUG
log4j.appender.error.appendFile=true
log4j.appender.error.Encoding=UTF-8
log4j.appender.error.File=log/error.txt
log4j.appender.error.MaxFileSize=4096KB
log4j.appender.error.MaxBackupIndex=2
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss.zzz]} [%t][%p] %m%n

总结

相关推荐
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
fyzy1 小时前
Qt获取本地计算的CPU温度
qt
cbdg37571 小时前
Qt 6 QML Settings location 不创建指定路径文件
qt
了一li1 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
杨德杰1 小时前
QT网络(一):主机信息查询
网络·qt
黄金右肾2 小时前
Qt之串口设计-线程实现(十二)
qt·thread·serialport
飞飞-躺着更舒服3 小时前
【QT】实现电子飞行显示器(改进版)
开发语言·qt
CYBEREXP20084 小时前
MacOS M3源代码编译Qt6.8.1
c++·qt·macos