QT自定义日志模块

253 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路:

QT中有时会遇到记录日志需求,但是每次在需要记录的地方都写一个读文件写文件实属很麻烦,甚至有时一不小心就忘记了close文件(虽然不知道忘记关闭文件会有什么后果,但总感觉很不好)。 @TOC

1 读写文件

首先什么是读写文件,为什么要去读写文件。 曾几何时,我调试代码的方式就是下断点和定点输出(我自己起的),下断点就不说了,大家都知道,那什么是定点输出呢: 在自己想要的地方输出自己想要的参数。 但是这两种方式对于大的项目就会很不实用,而且也不规范,记录成日志多高端啊。

QFile的简单使用

这里我读写文件使用的是QT中自带的QFile类,使用方法也是很简单: 首先引入必须的头文件:

#include <QFile>

然后:

    QFile file("路径");//路径可以使用相对路径,也可以是绝对路径,这里建议用相对路径。
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
        qDebug()<<"error"<<endl;/*若打开文件错误,则输出error,这里由于是记录日志,
        我的权限就是WriteOnly:只写*/
        
    QTextStream gOutStream (&file);//创建文件输入流
    gOutStream<<str<<"\n"<<endl;//输出到txt文件
    gOutStream.flush();//刷新缓冲区
    file.close();//关闭文件

这么一看是不是很简单?

2 封装模块

那么就下来就是对写日志的模块进行封装了: 首先创建一个Log文件夹,里面创建log.h/log.cpp文件: 在这里插入图片描述

#include <QString>
#include <QFile>
#include <QDebug>
class Log
{
public:
    Log();
    static void cin_httplog(QString str);//写入http日志
    static void cin_errorlog(QString str);//写入错误日志
private:
   static QString httplog;//HTTP日志路径
   static QString errorlog;//错误日志路径
};

这里采用静态是为了在外部不进行实例化也可以调用函数。 具体实现:

Log::Log()
{
    httplog = "./httplog.txt";
    errorlog = "./errorlog.txt";
}
void Log::cin_httplog(QString str)
{
    QFile file(httplog);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
        qDebug()<<"error"<<endl;
    QTextStream gOutStream (&file);
    gOutStream<<str<<"\n"<<endl;//输出到txt文件
    gOutStream.flush();//刷新缓冲区
    file.close();
}
void Log::cin_errorlog(QString str)
{
    QFile file(errorlog);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
        qDebug()<<"error"<<endl;
    QTextStream gOutStream (&file);
    gOutStream<<str<<"\n"<<endl;//输出到txt文件
    gOutStream.flush();//刷新缓冲区
    file.close();
}

3 引用

那么模块写好了,去试试引用吧: 首先在需要用到的地方引入Log.h文件:

#include "Log.h"

然后就可以进行记录:

Log::cin_httplog( QDateTime::currentDateTime().toString("yyyy-MM-dd hh.mm.ss ") + "接收图片信息失败"); //输出到txt文件