QT 轻量级的LOG日志库

一个按照时间的生成的日志库,生成TXT文档,分享代码如下:

.h如下:

#ifndef QLOG_H
#define QLOG_H

#include <QObject>
#include <QDateTime>
#include <QTimer>
class QLog : public QObject
{
    Q_OBJECT
public:
    explicit QLog(QObject *parent = nullptr);
signals:

public slots:
    static void messageHandler(QtMsgType type, const QMessageLogContext &, const QString &message_);
};

#endif // QLOG_H

.cpp文件如下:

#include "qlog.h"
#include <QApplication>
#include <QMutex>
#include <QFile>
#include <QDir>
#include <QIODevice>
#include <iostream>
#include <QTextStream>
QLog::QLog(QObject *parent) : QObject(parent)
{

}

void QLog::messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &message_)
{
    static QMutex mutex;
    static QString rawTargetFilePath=qApp->applicationDirPath()+"/log/%1.log";
    static bool argDateFlag=true;

    mutex.lock();

    QString message;
    QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
    QString currentTargetFilePath;

    if ( argDateFlag )
    {
        currentTargetFilePath = rawTargetFilePath.arg( ( ( argDateFlag ) ? ( QDateTime::currentDateTime().toString("yyyy_MM_dd") ) : ( "" ) ) );
    }
    else
    {
        currentTargetFilePath = rawTargetFilePath;
    }

    if ( !QFileInfo::exists( currentTargetFilePath ) )
    {
        QDir().mkpath( QFileInfo( currentTargetFilePath ).path() );
    }

    QFile file( currentTargetFilePath );
    file.open( QIODevice::WriteOnly | QIODevice::Append );
    switch ( type )
    {
        case QtDebugMsg:
        {
            message=message_;

            QTextStream textStream( &file );
            textStream << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss.zzz" ) << "->" <<context_info<<": "<<message << "\r"<<endl;

            QTextStream outStram(stdout);
            outStram << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss.zzz" ) << "->" <<context_info<<": "<<message <<endl;
            break;
        }
        case QtWarningMsg:
        {
            message.append("Warning: ");
            message.append(message_);
            QTextStream textStream( &file );
            textStream << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss.zzz" ) << "->" <<context_info<<": "<<message << "\r"<<endl;

            QTextStream outStram(stdout);
            outStram << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss.zzz" ) << "->" <<context_info<<": "<<message <<endl;
            break;
        }
        case QtCriticalMsg:
        {
            message.append("Critical: ");
            message.append(message_);
            QTextStream textStream( &file );
            textStream << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss.zzz" ) << "->" <<context_info<<": "<<message << "\r"<<endl;

            QTextStream outStram(stdout);
            outStram << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss.zzz" ) << "->" <<context_info<<": "<<message <<endl;
            break;
        }
        case QtFatalMsg:
        {
            message.append("Fatal: ");
            message.append(message_);
            QTextStream textStream( &file );
            textStream << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss.zzz" ) << "->" <<context_info<<": "<<message << "\r"<<endl;

            QTextStream outStram(stdout);
            outStram << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss.zzz" ) << "->" <<context_info<<": "<<message <<endl;
            break;
        }
        default: { break; }
    }

    mutex.unlock();
}

mainwindow.cpp的调用代码:

    QLog *log;
    log = new QLog;
    qInstallMessageHandler(log->messageHandler);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gallagher_SF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值