1. 程式人生 > >Qt5之 簡單的日誌記錄工具類

Qt5之 簡單的日誌記錄工具類

qt5 自己做的一個讀寫 sqlite3 的資料工具,能開啟sqlite3格式的資料庫檔案

完善前面的文章中提到的工具,最近在實戰中遇到了不少問題,故增加日誌記錄功能,記錄軟體的一些資訊,方便查詢問題

Qt 5 , mingw  

------------- 上程式碼-------------

類名 : 

HLogHelper
標頭檔案
#ifndef HLOGHELPER_H
#define HLOGHELPER_H

#include <QObject>
#include <QFile>
#include <QTextStream>
#include <QMutex>
#include <QDateTime>





// 日誌記錄類
class HLogHelper : public QObject
{


    Q_OBJECT
public:


    HLogHelper();
    //---------------------------------------------------------------




    // 設定檔名字首,ABC_20180909_131415.log, 這裡,引數就傳遞 ABC
    // 若不傳遞引數,預設以日期的方式命名:20180909_131415.log

    // 函式返回值:   0 - 建立檔案成功,
    //              1 - 開啟檔案失敗
    int HInit(QString strFilePre);


    // 物件銷燬時,關閉檔案
    //  返回值:    1 - 關閉失敗,檔案已經關閉

    //             0 - 關閉成功
    int HUnInit();

    //---------------------------------------------------------------


    // 時間 + 記錄內容
    int HLogTime(QString str ...);

    // 記錄內容
    int HLog(QString str...);




private:

    enum
    {
        // 日誌檔案大小
        he_log_file_size_1024kb    = 1024,
    };


private:
    QString         m_FileLogName;
    QFile           m_File;
    QTextStream     m_LogTextStream;
    QMutex          m_FileLogMutex;
    QDateTime       m_DateTime;

};

#endif // HLOGHELPER_H

.cpp檔案

#include "hloghelper.h"
#include <QObject>
#include <QDir>
#include <QApplication>
#include <cstdarg>
#include <QByteArray>



HLogHelper::HLogHelper()
{
    m_FileLogName   = QString("");
}


// 初始化建立檔案並開啟檔案
int HLogHelper::HInit(QString strFilePre)
{

   int len  = strFilePre.length();

   QString  fileName("");

   // 設定檔名
   // 1、若strFilePre不為空
    if (0  < len)
    {
        // 獲取當前日期
        QString date    = m_DateTime.currentDateTime().toString("yyyy_MM_dd_hh_mm_ss_zzz");
        fileName        = strFilePre + QString("_") + date;

    }
    else
    {
        //
        QString date    = m_DateTime.currentDateTime().toString("yyyy_MM_dd_hh_mm_ss_zzz");
        fileName        = date;
    }

    m_FileLogName       = fileName + QString("_.log");




    // 2、開啟檔案

    // 若當前exe所在目錄下不存在 HLog資料夾,則建立
    QString logPath     = QApplication::applicationDirPath() + QString("/HLog/");
    QDir dir(logPath);

    if (false == dir.exists())
    {
        dir.mkpath(logPath);
    }

    // 構造檔案
    m_FileLogName       = logPath + m_FileLogName;
    m_File.setFileName(m_FileLogName);

    bool openFlag       = m_File.open(QIODevice::Text | QIODevice::Truncate | QIODevice::WriteOnly | QIODevice::Append);
    if (false           == openFlag)
    {
        return 1;
    }


    m_LogTextStream.setDevice(&m_File);


    return 0;
}

// 關閉檔案
int HLogHelper::HUnInit()
{
    bool isExist    = m_File.exists(m_FileLogName);

    // 若不存在
    if (false       == isExist)
    {
        return 1;
    }

    // 檔案存在,檢查檔案是否已經開啟
    bool hasOepned  = m_File.isOpen();

    // 檔案打開了
    if (true        == hasOepned)
    {
        m_File.flush();
        m_File.close();
    }

    return 0;
}


// 日誌記錄前帶日期
int HLogHelper::HLogTime(QString str...)
{
    // 獲取當前日期
    QString date    = m_DateTime.currentDateTime().toString("yyyy_MM_dd hh_mm_ss_zzz:");

    QByteArray ba   = (date + str).toLocal8Bit();
    char *pArr      = ba.data();

    va_list al;
    va_start(al, pArr);
    QString strResult = QString::vasprintf(pArr,    al);
    va_end(al);

    m_LogTextStream << strResult << endl;
    m_LogTextStream.flush();

    return 0;

}


// 日誌前不帶日期
int HLogHelper::HLog(QString str...)
{

    QByteArray ba   = str.toLocal8Bit();
    char *pArr      = ba.data();

    va_list al;
    va_start(al, pArr);
    QString strResult = QString::vasprintf(pArr,    al);
    va_end(al);

    m_LogTextStream << strResult << endl;
    m_LogTextStream.flush();

    return 0;

}

說明:

     1、使用方法,首先需要呼叫 HInit設定日誌檔名先關資訊,並開啟檔案

      2、記錄日誌有2種方法,一種是每一行記錄前面支援日期, 另一種則不支援記錄日期。

      3、該類會在 exe所在目錄建立一個 HLog 資料夾,用於存放日誌檔案

不足:

     1、沒有指定日誌檔案的大小,可以一直向檔案寫入,很不友好,

      2、沒有增加刪除日誌,比如,軟體自動刪除前1個月的日誌

針對這些不足,後期維護補上..........................................

Ex:

 設定日誌名

#ifdef he_use_log
    m_Log.HInit(QString("ABC"));
#endif//he_use_log

記錄日誌


#ifdef he_use_log
    m_Log.HLogTime(QString("void Dialog::TopMenuStartSlotOpen() start"));
#endif // he_use_log

--- 完----- 

相關推薦

Qt5 簡單日誌記錄工具

qt5 自己做的一個讀寫 sqlite3 的資料工具,能開啟sqlite3格式的資料庫檔案 完善前面的文章中提到的工具,最近在實戰中遇到了不少問題,故增加日誌記錄功能,記錄軟體的一些資訊,方便查詢問題 Qt 5 , mingw   ------------- 上

工具)Linux筆記終端日誌記錄工具script

工具類 article 空間 post 令行 有時 可能 關於 edit 在學習Linux時,有時候終端的打印消息對於我們很重要,可是終端顯示也是有一定的緩沖空間的。當信息打印許多時,前面的信息就會被覆蓋掉。所以這裏網上搜索了一下這方面的介紹。現總結例如以下:

封裝一個基於NLog+NLog.Mongo的日誌記錄工具LogUtil

edi day rap ble mongo return 情況 earch ati 封裝一個基於NLog+NLog.Mongo的日誌記錄工具類LogUtil,代碼比較簡單,主要是把MongoTarget的配置、FileTarget的配置集成到類中,同時利用緩存依賴來判斷是否

Oracle 日誌記錄工具

在我們編寫儲存過程,或者PKG時,總有一些異常情況考慮不到;為了快速排查定位問題,需要及時記錄異常日誌;   1.建表語句 : 異常日誌表;正常日誌表 create table SSS.TC_EXCEPTION_LOG ( l

日誌記錄工具

import org.apache.log4j.Logger;public class LogUnits { private static Logger logger = null; public static void logException(Exception e){

從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架十 || AOP面向切面程式設計淺解析:簡單日誌記錄 + 服務切面快取

  今天的講解就到了這裡了,通過這兩個小栗子,大家應該能對面向切面程式設計有一些朦朧的感覺了吧

core學習歷程五 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架十 || AOP面向切面程式設計淺解析:簡單日誌記錄 + 服務切面快取 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架十一 || AOP自定義篩選,Redis入門 11.1

繼續學習 “老張的哲學”博主的系列教程,感謝大神們的無私分享 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面程式設計淺解析:簡單日誌記錄 + 服務切面快取 說是朦朧,,emmm,對我來說是迷糊哈。上半段正常,下半段有點難理解,操作是沒問題。多看幾遍再消

JDK5新特性線程同步工具(三)

string 兩個人 exec random 主線程 一個人 exce print exchange 一. Semaphore Semaphore能夠控制同一時候訪問資源的線程個數, 比如: 實現一個文件同意的並發訪問數. Semaphore實現的功能就類似廁全部5個坑

日誌記錄工具 log4net 的配置與使用

ole 彈出菜單 pen logs 日誌組 RR log4net amp extension 項目的日誌組件是必備可少的,任何項目中都需要。這樣既方便前期的開發測試也方便項目後期的項目維護。C#項目的一個不錯的日誌組件是log4net,下面我就把程序項目中log4net的如

Java日誌記錄工具SLF4J介紹

ack imp 配置文件 index log4j alt title pri tps SLF4J是什麽 SLF4J是一個包裝類,典型的facade模式的工具,對用戶呈現統一的操作方式,兼容各種主流的日誌記錄框架,典型的有log4j/jdk logging/nop/simpl

PHP簡單的分頁

lang ger star try select tar -h code doc pageClass.php <?php class Page{ private $total;//總條數 private $size;//每頁條數 priva

適用於Linux的開源日誌記錄工具

如果您是Linux系統管理員,那麼您將要使用的第一個工具是日誌檔案。 這些檔案包含重要資訊,可以幫助您解決影響桌面和伺服器的問題。 對於許多系統管理員(特別是那些舊式的系統管理員),沒有什麼比檢查日誌檔案更好的命令列。 但對於那些寧願採用更有效(也可能是現代)方法進行故障排除的人來說,有很多選擇。 在本文中

Android開發訪問WebService的工具

Android中使用WebService通訊,下面對訪問WebService的工具類進行記錄 package com.wjy.project.railway.tools; import android.os.Handler; import android.os.Message;

【java小程式實戰】小程式短視訊後端專案返回結果包裝工具

在開發過程中,我們在controller 中把需要返回的結果封裝成一個IMoocJSONResult類,再把資料轉換為json格式,傳送到前端頁面。 IMoocJSONResult類程式碼: package com.imooc.utils; /** * @Description: 自

Java_Log4j日誌記錄工具

【1】在工程中匯入log4j包 右鍵工程 - Properties  【2】建立log4j.properties檔案      右鍵src > new > file       file name 填寫log4j.properties

Stoker的Java學習封裝資料庫連線工具與commons-dbutils

Java學習之封裝資料庫連線工具類與commons-dbutils 一.封裝資料庫連結工具類 public class JDBCUitl { // 宣告連結 private static Connection connection; // 註冊驅動 st

Spring Aop實現簡單日誌記錄

日誌類 package com.jusfoun.estate.log.domain; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import java

簡單小巧倒計時工具 android

android 簡單小巧倒計時工具類 借鑑前人經驗的基礎上改動 廢話不多說了,先上效果圖 看到這裡說明有點用,給你個程式碼 工具類使用示例 感覺有用,順手點個贊,收藏一下,有備無患 借鑑前人經驗的基礎

Android 常用開發工具 SPUtils (SharedPreference 工具

開發過程中難免會遇到如持久儲存使用者資訊等需求,而由於資料量很少感覺使用 Sql 有些殺雞用牛刀的感覺也有些累贅。所以善於使用 SharedPreference 可以幫助我們在本地儲存一些資料量少,又使用很頻繁的東西。 SPUtils 一個可以幫助我們很簡潔的使用  Sha

Java網路程式設計URLEncode和URLDecode工具

import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; public class EncodeTest {