Qt开发笔记:log4Qt编译和使用

Log4Qt介绍

       Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C ++端口。它旨在供开源和商业Qt项目使用。

1、下载源码、将源码放在你所需要的项目中。

include($$PWD/src/log4qt/log4qt.pri)

源码地址:https://sourceforge.net/projects/log4qt/

2、封装日志类

       封装成独立的日志类,这样不论用什么日志系统只需要改变该类,代码其他模块无需改变,使用单例模式,因log4qt本身是线程安全的,所以不用考虑多线程,下面是封装的log4qt日志类

#ifndef LOG_H

#define LOG_H

#include <QObject>

#include <QMutex>

#include <QMutexLocker>

#include <QCoreApplication>

#include "log4qt/logger.h"

#include "log4qt/basicconfigurator.h"

/************************************************************\

 * 类名:Log

 * 描述:封装log4qt开源库类

 * 注意:模块已带log4qt for qt4 和 qt5两个版本;

 *      模块已带log4qt配置文件,分为4级别:DEBUG > INFO > WARN > ERROR

 * 信号:

 * 函数:

 *      instance() - 获取日志唯一实例

 * 槽函数:

 *      slot_init() - 初始化加载配置文件

 *      slot_debug() - 调试级别日志

 *      slot_info() - 信息级别日志

 *      slot_warn() - 警告级别日志

 *      slot_error() - 错误级别日志

 *

\************************************************************/

class Log : public QObject

{

    Q_OBJECT

public:

    explicit Log(QObject *parent = nullptr);

signals:

public slots:

    static Log * instance();

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 Log *_pInstance;

    static QMutex _mutex;

    static Log4Qt::Logger * _pLoggerDebug;

    static Log4Qt::Logger * _pLoggerInfo;

    static Log4Qt::Logger * _pLoggerWarn;

    static Log4Qt::Logger * _pLoggerError;

    static QString _configFilePath;

};

#endif

#include "Log.h"

#include "log4qt/log4qt.h"

#include "log4qt/propertyconfigurator.h"

Log * Log::_pInstance = 0;

QMutex Log::_mutex;

Log4Qt::Logger * Log::_pLoggerDebug = 0;

Log4Qt::Logger * Log::_pLoggerInfo = 0;

Log4Qt::Logger * Log::_pLoggerWarn = 0;

Log4Qt::Logger * Log::_pLoggerError = 0;

QString Log::_configFilePath;

Log::Log(QObject *parent) : QObject(parent)

{

    // 一定要配置文件,不然运行起来会直接当掉

    Log4Qt::BasicConfigurator::configure();

}

Log *Log::instance()

{

    if(!_pInstance)

    {

        QMutexLocker mutexLocker(&_mutex);

        if(!_pInstance)

        {

            Log *pInstance = new Log();

            _pInstance = pInstance;

        }

    }

    return _pInstance;

}

void Log::init(QString configFilePath)

{

    _configFilePath = configFilePath;

     Log4Qt::PropertyConfigurator::configure(_configFilePath);

    _pLoggerDebug = Log4Qt::Logger::logger("debug");

    _pLoggerInfo = Log4Qt::Logger::logger("info");

    _pLoggerWarn = Log4Qt::Logger::logger("warn");

    _pLoggerError = Log4Qt::Logger::logger("error");

}

void Log::debug(QString msg)

{

    _pLoggerDebug->debug(msg);

}

void Log::info(QString msg)

{

    _pLoggerInfo->info(msg);

}

void Log::warn(QString msg)

{

    _pLoggerWarn->warn(msg);

}

void Log::error(QString msg)

{

    _pLoggerError->error(msg);

}

3、测试代码

main.cpp

#include <QApplication>

#include <QTextCodec>

#include <QThread>

#include "Log.h"

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    QThread::currentThread()->setObjectName("主线程");

    QTextCodec *codec = QTextCodec::codecForName("utf-8");

    QTextCodec::setCodecForLocale(codec);

    Log::instance()->init(QCoreApplication::applicationDirPath() + "/" +"etc/log.conf");

    Log::instance()->debug("调试测试日志系统当中...");

    Log::instance()->info("信息测试日志系统当中...");

    Log::instance()->warn("警告测试日志系统当中...");

    Log::instance()->error("错误测试日志系统当中...");

    return a.exec();

}

4、配置文件

log.conf

log4j.logger.debug=trace,debug

log4j.appender.debug=org.apache.log4j.RollingFileAppender

log4j.appender.debug.appendFile=true

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=trace,info,debug

log4j.appender.info=org.apache.log4j.RollingFileAppender

log4j.appender.info.appendFile=true

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=trace,info,debug,warn

log4j.appender.warn=org.apache.log4j.RollingFileAppender

log4j.appender.warn.appendFile=true

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=trace,info,debug,warn,error

log4j.appender.error=org.apache.log4j.RollingFileAppender

log4j.appender.error.appendFile=true

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,937评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,957评论 0 6
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,689评论 0 3
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan阅读 3,274评论 0 0
  • 今天还算满意。早起晨读,女儿学习也开启正常模式。傍晚锻炼。接下来把学习笔记和核老师的课开启复读模式。逐字稿一周一篇。
    竹_f90c阅读 155评论 0 0