文件日志

前言&目录 基于QT的WceUi

作为一个库,最基本的应该具有日志功能,在所有潜在错误的地方打日志,方便用户调试.

本文介绍WceUi界面库所有的日志类.

日志类是一个基本功能,我把他加入了全局类变量中,如果你还不知道全局类变量,参考https://www.netpt.net/forum.php?mod=viewthread&tid=40
加入的方法如下,在.h中加入如下代码

DECLARE_GVAR_HEAD(CFhWriteLogFile)


class CGVarManage
{
    //在这里加上你要的全局变量,加上前面的先初始化,后面的后初始化
    //析构时,后面的先析构,前面的后析构
    DECLARE_GVAR_IN_ORDER(CFhWriteLogFile);
}

然后在.cpp中加入如下代码

NS_WCEUI_BEGIN

//这里的顺序是没有关系的
IMPLEMENT_GVAR(CFhWriteLogFile);

这样,我们就有一个全局类变量CFhWriteLogFile了.


CFhWriteLogFile的构造函数中,有一个DefaultInit,代码如下:

void wceui::CFhWriteLogFile::DefaultInit()
{
    QString strFilePath = QCoreApplication::applicationFilePath();
    if (!strFilePath.isEmpty())
    {
         QFileInfo fi(strFilePath);
         if (fi.isFile())
         {
                         strFilePath += LOGFILE_POSTFIX;
             Init(strFilePath, DEFAULT_LOGFILE_SIZE);
         }
    }
}

这个代码表示,默认会把日志文件放在exe所在的目录,同时会设置默认的日志大小.


日志总有写满的时候,如果写满了,就要循环写,这样可以避免产生的日志文件过大.处理循环写日志的函数为SetFileSize,代码如下

FHBOOL wceui::CFhWriteLogFile::SetFileSize()
{
    FHBOOL bResult = FHFALSE;
    qint64 llFileSize = 0;
    qint64 llNewFileSize = 0;

    if (NULL == m_qFile)
    {
        goto EndOfSetFileSize;
    }

    llFileSize = m_qFile->size();
    if (llFileSize < m_llMaxLogFileSize)
    {
        bResult = TRUE;
        goto EndOfSetFileSize;
    }

    llNewFileSize = llFileSize - (llFileSize >> 2); //设置文件大小为原来的3/4

        if (llNewFileSize > 0) //随便写的一个条件,让后面的{}看起来更自然
        {
                qint64 pos = llFileSize - llNewFileSize;
                m_qFile->seek(pos);

                QByteArray qbBuffer = m_qFile->read(llNewFileSize);
                m_qFile->seek(0);
                m_qFile->write(qbBuffer);
                m_qFile->resize(llNewFileSize);

                m_qFile->seek(llNewFileSize); //把写的指针移动到文件末尾
                m_qFile->flush();
        }




    bResult = FHTRUE;
EndOfSetFileSize:
    if (!bResult)
    {
        UnInit();
    }
    return bResult;
}

好了,以上就是实现日志类的关键点,下面我讲日志类相关的API调用

FHBOOL WceUiSetLog(QString strLogFileFullPath, qint64 llMaxLogFileSize)

这个函数有两个参数,第一个参数是自己设置的日志文件的全路径,第二个参数是日志大小

void WceUiWriteLog(WCEUI_LOG_LEVEL errLevel, LPFHCSTR lpszFormat, ...)

这个函数是用来输出日志的,直接调用就可以了,下面是一个调用示范

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    for (int i = 1, j = 100; i < 100000; i++, j--)
    {
        WceUiWriteLog(WCEUI_LOG_INFO, "%08d hello,hi,我%d是wceui", i, j);
    }

    return a.exec();
}

附件有全部代码,在win7/ubuntu16上测试通过

备份地址:https://netpt.net/forum.php?mod=viewthread&tid=41

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值