1.日志信息的作用
通过日志信息,可以对系统进行实时记录,快速定位问题的根源。记录程序运行的行为和系统操作,程序员必备技能。
2.日志信息范围
可以是 系统日志,系统日志通常记录操作系统的运行信息,包括启动和关闭时间、系统错误、硬件故障 。应用程序日志,应用程序日志记录应用程序的运行信息,包括用户交互、错误消息。安全日志,安全日志记录与安全相关的事件,如用户登录、访问控制、入侵检测。
3.项目结构
4.日志保存在本地代码
.h文件
#pragma once
#include <QObject>
#include<QTextStream>
#include <QDateTime>
#include <QFile>
#include <QDir>
class logMessage : public QObject
{
Q_OBJECT
public:
protected:
explicit logMessage(QObject* parent = nullptr);
private:
public:
static logMessage* instance();
~logMessage();
int savelogMessage(QString savePath, const QString& message) const;
};
.cpp文件
#include "logMessage.h"
logMessage::logMessage(QObject *parent)
: QObject(parent)
{}
logMessage* logMessage::instance()
{
static logMessage ins;
return &ins;
}
logMessage::~logMessage()
{}
int logMessage::savelogMessage(QString savePath, const QString & message) const
{
QDir dir(savePath);
//判断保存路径是否存在
if (!dir.exists()) {
QDir().mkpath(savePath);
}
// 获取当前时间
QDateTime currentTime = QDateTime::currentDateTime();
// 构造日志信息
QString logEntry = currentTime.toString("[yyyy-MM-dd hh:mm:ss] ") + message;
// 打开或创建日志文件
QString saveName = savePath + "/" + currentTime.toString("yyyy_MM_dd") + ".txt";
QFile logFile(saveName);
if (logFile.open(QIODevice::Append | QIODevice::Text)) {
QTextStream textStream(&logFile);
// 写入日志信息
textStream << logEntry << "\n";
// 关闭文件
logFile.close();
}
return 0;
}
保存log信息到本地.txt文件
5.应用程序显示日志代码
1.在实现类创建枚举 你可以自己定义 自己的枚举类型
class testRelease : public QWidget
{
Q_OBJECT
public:
testRelease(QWidget *parent = nullptr);
~testRelease();
enum MesState {
Normal = 0,
Warning,
Critical
};
//显示日志接口
void printLog(QString mes, MesState state);
}
2.创建ui
3.打印日志接口的实现
void testRelease::printLog(QString mes, MesState state)
{
// 创建日志时间
QDateTime currentTime = QDateTime::currentDateTime();
//创建日志记录
QString logEntry = currentTime.toString("[yyyy-MM-dd hh:mm:ss] ") + mes;
QTextCharFormat fmt;
//定义字体大小
fmt.setFontPointSize(12);
//定义字体样式
fmt.setFontFamily("Microsoft YaHei");
//根据 state 状态配置颜色
QColor color(0, 0, 0);
if (Normal == state) {
color.setRgb(50, 205, 50);//正常的
}
else if (Warning == state){
color.setRgb(255, 200, 0); //警告的
}
else if (Critical == state) {
color.setRgb(255, 0, 0); //危险的
}
//设置字体样式
fmt.setForeground(color);
ui.textEdit->setCurrentCharFormat(fmt);
//显示日志
ui.textEdit->append(logEntry);
//保存到本地
logMessage::instance()->savelogMessage("e:/log", mes);
}
4.这里构造函数,接口使用方式
#include "testRelease.h"
#include <QDebug>
#include <QDateTime>
#include "logMessage.h"
testRelease::testRelease(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
QTime time;
time.start();
printLog(u8"正常的信息(设备正常运行)", Normal);
qDebug() << u8"保存一条log信息花费时间为" << time.elapsed() << "ms";
printLog(u8"警告的信息(设备已停止)", Warning);
printLog(u8"危险的信息(设备异常)", Critical);
}
6.实现效果
应用程序显示log信息,安装等级颜色划分,显示日志信息时,同时保存到了本地。