QT log日志的使用(二)

在第一篇中有人问,如果qInstallMessageHandler注册函数注册不了的情况下怎么办,在这里说一下我现在日志文件使用的方法,以及写多个日志文件时我的方案。

先附一个第一篇log日志的原文,有需要的可以进去看一下:https://blog.csdn.net/bloke_come/article/details/76090845

这里说一下,这一篇写日志的思路,来源于第一篇,原来需要注册,我这里不再进行注册,直接进行写入,示例代码如下:

	// 将这一部分封装为函数,调用函数即可
	// strLogInfo 为传入参数
	static QMutex mutexFileHttps;
	mutexFileHttps.lock();
    QString context_info = QString("%1").arg(strLogInfo);
    QString current_date_time = QTime::currentTime().toString("hh:mm:ss");
    QString current_date = QString("(%1)").arg(current_date_time);
    QString message = QString("%1 %2").arg(current_date).arg(context_info);

    QString strCurDay = QDate::currentDate().toString("yyyy_MM_dd");
    QString strFileName = "";
#if defined (Q_OS_WIN)
    strFileName = QString("C:/Log/Https_log_") + strCurDay + QString(".txt");
#elif defined (Q_OS_LINUX)
    strFileName = QString("../Log/Https_log_") + strCurDay + QString(".txt");
#endif
    QFile fileHttps(strFileName);
    fileHttps.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream text_stream(&fileHttps);
//    text_stream.setCodec("UTF-8");
    text_stream << message << "\r\n";
    fileHttps.flush();
    fileHttps.close();

	deleteFile("03",strFileName);			// 这个函数是用来删除日志的(日志保留7天),到某一个固定时间,对日志进行删除
    mutexFileHttps.unlock();
void deleteLogFile(QString strDeleteTime , QString strPath)
{
    if(QTime::currentTime().toString("hh") != strDeleteTime)
    {
        return;
    }
    // 根据自己的文件名长度,修改后面的数字
    QString strTmpPath = strPath.left(strPath.length() - 25);
    QDir dir = QDir(strTmpPath);
    //要判断路径是否存在
    if(!dir.exists())
        return ;
    dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);//实现对文件的过滤
    dir.setSorting(QDir::Size | QDir::Reversed);//实现对文件输出的排序

    QFileInfoList list = dir.entryInfoList();
    QStringList string_list;

    for (int i = 0; i < list.size(); ++i)
    {
        QFileInfo fileInfo = list.at(i);
        QString suffix = fileInfo.suffix();
        if(QString::compare(suffix, QString("txt"),Qt::CaseInsensitive) ==  0)//通过QFileInfo来实现对文件类型的过滤
        {
            QString absolute_file_path = fileInfo.absoluteFilePath();
            string_list.append(absolute_file_path);
        }
    }

    for(int index = 0; index < string_list.size(); index++)
    {
        QString strFilePath = string_list.at(index);
        QString stryyyyMMddtxt = strFilePath.right(14);
        QString stryyyyMMdd = stryyyyMMddtxt.left(10);
        QDate fileDateTime = QDate::fromString(stryyyyMMdd, "yyyy_MM_dd");
        QDate curDateTime = QDate::currentDate();
        QDate curDeleteTime = curDateTime.addDays(-7);
        if(fileDateTime < curDeleteTime)
        {
            QFile fileDelete(strFilePath);
            fileDelete.remove();
        }
    }
}

可能有人注意到了,我获取时间和日期分别用的:QTimeQDate这两个类。这里说明一下,使用这两个的原因是,使用QDateTime在运行一段时间后会出现(数字)乱码,这个我到现在为止也不清楚出现的原因,有人说是中文导致的,但是我这只有阿拉伯数字,而且乱码部分还有一定规律,下面附乱码图片,有人知道乱码原因,评论一下出现的原因,不胜感激。后来尝试修改,发现使用这两个后,到目前为止运行大约3个月左右了,没有再次出现,所以认为得到了解决,就延续了下来。
正常日志和异常日志

我这两个函数封装了一个类,这个类采用单例模式,保证使用同一个内存空间,下面附源码地址:https://download.csdn.net/download/bloke_come/12272889
源码中可能会有一些的缺头文件或者多头件的情况,合理处理这种情况即可(出现这种问题的原因是:部分变量是直接从自定义的全局变量中获取的)

这里对QFile在Linux下使用时候有的一个小坑进行下说明:

如果QFile *file = new QFile();
这样使用的,那么QTextStream 部分一定要通过flush 强刷入文件
否者会出现段错误
别问为什么会知道,因为碰到了╮(╯▽╰)╭

下面附Linux错误用法:

Linux下错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值