最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實(shí)現(xiàn)輸出日志到指定文件的操作方法

 更新時(shí)間:2024年07月30日 10:31:03   作者:Uranus^  
這篇文章主要介紹了Qt實(shí)現(xiàn)輸出日志到指定文件的操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

開發(fā)平臺(tái) :

Qt Creator

語言:

C++

需求:

  • 獲取日志信息,寫入指定文件
  • 日志7天后過期
  • 保護(hù)寫入日志進(jìn)程

前置操作:

1.在CMakeLists.txt中添加如下代碼

# 添加預(yù)處理,防止在release模式下,輸出的日志信息不顯示文件名,行號(hào)等信息
add_definitions(-DQT_MESSAGELOGCONTEXT)

2.創(chuàng)建LogManage.h 和 LogManage.cpp

具體代碼:

LogManage.h

#pragma once
#include <QApplication>
#include <QtDebug>
#include <QFile>
#include <QTextStream>
#include <qdatetime.h>
//初始化
void InitalizeLog();
//獲取日志存儲(chǔ)目錄路徑
QString getLogFilePath();
//日志處理
void LogMessageHandler(QtMsgType type,const QMessageLogContext &context, const QString &messages);

LogManage.cpp

#include "src/LogManage.h"
#include <qdir.h>
#include <QDateTime>
#include <QFileInfoList>
#include <qfileinfo.h>
#include <QMutex>
void InitalizeLog()
{
    //1. 預(yù)設(shè)日志目錄并檢查是否創(chuàng)建
    QString path = getLogFilePath();
    QDir dir(path);
    if(!dir.exists()){
        dir.mkdir(path);
    }
    //2. 日志7天后過期邏輯
    QDateTime last_time = QDateTime::currentDateTime().addDays(-7);
    QFileInfoList infoList = dir.entryInfoList();
    for(QFileInfo info : infoList){
        if(info.fileName() == "." || info.fileName() == ".."){
            continue;
        }
        if(last_time.secsTo(info.birthTime()) < 0){//secsTo: 差多少秒到
            info.dir().remove(info.fileName());
        }
    }
}
void LogMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &message)
{
    //1. 加鎖,保護(hù)進(jìn)程
    static QMutex mutex;//互斥鎖 QMutex
    mutex.lock();
    //2. 日志信息生成及處理
    /*** 1.日志消息類型 ***/
    QString m_type("");
    switch (type) {
    case QtDebugMsg:
        m_type = QString("Debug");
        break;
    case QtInfoMsg:
        m_type = QString("Info");
        break;
    case QtWarningMsg:
        m_type = QString("Warning");
        break;
    case QtCriticalMsg:
        m_type = QString("Critical");
        break;
    case QtFatalMsg:
        m_type = QString("Fatal");
        break;
    }
    /*** 2.日志消息 ***/
    QByteArray m_message = message.toUtf8();
    /*** 3.日志生成日期 ***/
    QString m_date = QDateTime::currentDateTime().toString("yyyy-mm-dd hh:mm::ss");
    /*** 4.日志所在文件&行 ***/
    QString m_file = context.file;
    int m_line = context.line;
    QString m_log = QString("[%1]-<文件:%2    所在行:%3    日期:%4> ----------------- %5")
                        .arg(m_type).arg(m_file).arg(m_line).arg(m_date).arg(m_message);
    //3. 日志寫入預(yù)設(shè)文件
    QString m_filePath = getLogFilePath();
    QString m_fileName = QDate::currentDate().toString("yyyy-MM-dd");
    m_fileName += ".txt";
    m_fileName = m_filePath + "/" + m_fileName;
    m_fileName = QDir::toNativeSeparators(m_fileName);
    QFile file(m_fileName);
    file.open(QIODevice::ReadWrite | QIODevice::Append);
    QTextStream stream(&file);
    stream<< m_log << "\r\n";
    file.flush(); //直接將緩沖中的內(nèi)容寫入文件
    file.close();
    //4. 解鎖
    mutex.unlock();
}
QString getLogFilePath()
{
    QString str = qApp->applicationDirPath();
    str = str.left(str.lastIndexOf("/"));
    str += "/myLog";
    str = QDir::toNativeSeparators(str);//toNativeSeparators: 轉(zhuǎn)到本地分隔符
    return str;
}

main.cpp

int main(int argc, char *argv[])
{
//release模式下啟動(dòng)日志文件輸出
#ifdef QT_NO_DEBUG
    InitalizeLog();
    //自定義日志輸出
    qInstallMessageHandler(LogMessageHandler);
#endif
//other..
//other..
//other..
//other..
}

到此這篇關(guān)于Qt實(shí)現(xiàn)輸出日志到指定文件的文章就介紹到這了,更多相關(guān)Qt輸出日志到指定文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文讀懂c++之static關(guān)鍵字

    一文讀懂c++之static關(guān)鍵字

    這篇文章主要介紹了c++之static關(guān)鍵字的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C++ 讀取文件內(nèi)容到指定類型的變量方法

    C++ 讀取文件內(nèi)容到指定類型的變量方法

    今天小編就為大家分享一篇C++ 讀取文件內(nèi)容到指定類型的變量方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • c++日志庫log4cplus快速入門小結(jié)

    c++日志庫log4cplus快速入門小結(jié)

    文章瀏覽閱讀1.1w次,點(diǎn)贊9次,收藏44次。本文介紹Log4cplus,一種適用于C++的線程安全日志記錄API,提供靈活的日志管理和配置控制。文章涵蓋日志等級(jí)、配置文件詳解、使用示例及初始化步驟。
    2025-08-08
  • 最新評(píng)論

    玛纳斯县| 普兰县| 元氏县| 浪卡子县| 娄烦县| 喀喇沁旗| 鹤壁市| 扶余县| 阿坝县| 黄骅市| 靖江市| 高密市| 岱山县| 泾源县| 太保市| 宝丰县| 星子县| 色达县| 道孚县| 武清区| 苍山县| 都安| 安义县| 马尔康县| 梅州市| 自治县| 大港区| 高淳县| 罗源县| 沭阳县| 高阳县| 黄骅市| 北京市| 平乡县| 遂川县| 东辽县| 武邑县| 波密县| 彩票| 渭源县| 会昌县|