QT实现一个简单的日志打印系统

简介: QT实现一个简单的日志打印系统

效果演示

使用方法:直接将logsystem.cpp文件和logsystem.h文件添加到工程目录中,然后包含即可使用。

直接调用打印接口

然后在程序exe文件夹下会生成一个文件名叫log_debug.txt文件。

源文件.C

#include "logsystem.h"
LogSystem::LogSystem()
{
}
void LogSystem::error(QString msg)
{
    if(!Write_debug_information("error",msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
void LogSystem::debug(QString msg)
{
    if(!Write_debug_information("debug",msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
void LogSystem::warning(QString msg)
{
    if(!Write_debug_information("warning",msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
void LogSystem::info(QString msg)
{
    if(!Write_debug_information("info",msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
bool LogSystem::Write_debug_information(QString level, QString message)
{
    QDateTime current_date_time =QDateTime::currentDateTime();
    QString current_date =current_date_time.toString("yyyy.MM.dd hh:mm");
    QString fileName = QCoreApplication::applicationDirPath() + "/debug_log.txt";// 获取程序当前运行目录
    QTextStream txtOutput(&file);
    QString write_str;
    file.setFileName(fileName);
    if (!file.open(QIODevice::ReadWrite | QIODevice::Append))   /* 以append的方式打开 */
    {
        return false;
    }
    if (level == "DEBUG" || level == "debug")
    {
        write_str = QString("[%1][%2]:%3").arg("DEBUG").arg(current_date).arg(message);
        txtOutput << write_str <<endl;
//        file.write(write_str.toLocal8Bit());
    }
    else if(level == "WARNING" || level == "warning")
    {
        write_str = QString("[%1][%2]:%3").arg("WARNING").arg(current_date).arg(message);
        txtOutput << write_str <<endl;
//        file.write(write_str.toLocal8Bit());
    }
    else if(level == "ERROR" || level == "error")
    {
        write_str = QString("[%1][%2]:%3").arg("ERROR").arg(current_date).arg(message);
        txtOutput << write_str <<endl;
//        file.write(write_str.toLocal8Bit());
    }
    else if(level == "INFO" || level == "info")
    {
        write_str = QString("[%1][%2]:%3").arg("INFO").arg(current_date).arg(message);
        txtOutput << write_str <<endl;
//        file.write(write_str.toLocal8Bit());
    }else
    {
        file.close();/* 关闭文件 */
        return false;
    }
    file.close();/* 关闭文件 */
    return true;
}

源文件.h文件

#ifndef LOGSYSTEM_H
#define LOGSYSTEM_H
#include <QFile>
#include <QString>
#include <QTime>
#include <QDebug>
#include <QTextStream>
#include <QCoreApplication>
#include <QMessageBox>
class LogSystem
{
public:
    LogSystem();
    QFile file;
    QString fileName;
    
private:
    bool Write_debug_information(QString level, QString info);
    
public slots:   
    void info(QString msg);
    void error(QString msg);
    void warning(QString msg);
    void debug(QString msg);
};
#endif // LOGSYSTEM_H

2021-11-21更新

.cpp文件

#include "logsystem.h"
/***
 * 构造函数:
 * 初始化日志系统目录
 ***/
LogSystem::LogSystem()
{
    QDateTime current_date_time =QDateTime::currentDateTime();
    QString current_date =current_date_time.toString("yyyyMMdd");
    QDir dir;
    if (!dir.exists(fileAddress + current_date))
    {
        dir.mkdir(fileAddress + current_date);
        qDebug() << "[INFO][:" +current_date_time.toString("yyyy.MM.dd hh:ss") +  "]:新建LOG文件夹" << endl;
    }
    fileName = fileAddress + current_date + fileName;
}
/***
 * 打印错误信息并附带系统时间
 ***/
void LogSystem::error(QString msg)
{
    if(openFlag == false) return;
    if(!Write_debug_information("error",true,msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
/***
 * 打印调试信息并附带系统时间
 ***/
void LogSystem::debug(QString msg)
{
    if(openFlag == false) return;
    if(!Write_debug_information("debug",true,msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
/***
 * 打印警告信息并附带系统时间
 ***/
void LogSystem::warning(QString msg)
{
    if(openFlag == false) return;
    if(!Write_debug_information("warning",true,msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
/***
 * 打印提示信息并附带系统时间
 ***/
void LogSystem::info(QString msg)
{
    if(openFlag == false) return;
    if(!Write_debug_information("info",true,msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
/***
 * 打印错误信息
 ***/
void LogSystem::error_notime(QString msg)
{
    if(openFlag == false) return;
    if(!Write_debug_information("error",false,msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
/***
 * 打印调试信息
 ***/
void LogSystem::debug_notime(QString msg)
{
    if(openFlag == false) return;
    if(!Write_debug_information("debug",false,msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
/***
 * 打印警告信息
 ***/
void LogSystem::warning_notime(QString msg)
{
    if(openFlag == false) return;
    if(!Write_debug_information("warning",false,msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
/***
 * 打印提示信息
 ***/
void LogSystem::info_notime(QString msg)
{
    if(openFlag == false) return;
    if(!Write_debug_information("info",false,msg))
    {
        QMessageBox::information(NULL, "information", "log system error!");
    }
}
/***
 * 设置日志信息文件名字
 ***/
void LogSystem::setFileName(QString name)
{
    this->fileName = name;
}
/***
 * 设置是否开启日子系统的qdebug信息输出
 ***/
void LogSystem::setQdebugFlag(bool flag)
{
    this->qDebugFlag = flag;
}
/***
 * 打开日志系统
 ***/
void LogSystem::start()
{
    openFlag = true;
}
/***
 * 关闭日志系统
 ***/
void LogSystem::stop()
{
    openFlag = false;
}
/***
 * 写入信息到日志信息文本文件中
 ***/
bool LogSystem::Write_debug_information(QString level, bool time, QString message)
{
    QDateTime current_date_time =QDateTime::currentDateTime();
    QString current_date =current_date_time.toString("yyyy-MM-dd hh:mm");
    QTextStream txtOutput(&file);
    QString write_str;
    file.setFileName(fileName);
    if (!file.open(QIODevice::ReadWrite | QIODevice::Append))   /* 以append的方式打开 */
    {
        return false;
    }
    if (time == true){
        if (level == "DEBUG" || level == "debug")
        {
            write_str = QString("[%1][%2]:%3").arg("DEBUG").arg(current_date).arg(message);
            txtOutput << write_str <<endl;
            if(qDebugFlag) qDebug() << write_str <<endl;
        }
        else if(level == "WARNING" || level == "warning")
        {
            write_str = QString("[%1][%2]:%3").arg("WARNING").arg(current_date).arg(message);
            txtOutput << write_str <<endl;
            if(qDebugFlag) qDebug() << write_str <<endl;
        }
        else if(level == "ERROR" || level == "error")
        {
            write_str = QString("[%1][%2]:%3").arg("ERROR").arg(current_date).arg(message);
            txtOutput << write_str <<endl;
            if(qDebugFlag) qDebug() << write_str <<endl;
        }
        else if(level == "INFO" || level == "info")
        {
            write_str = QString("[%1][%2]:%3").arg("INFO").arg(current_date).arg(message);
            txtOutput << write_str <<endl;
            if(qDebugFlag) qDebug() << write_str <<endl;
        }else
        {
            file.close();/* 关闭文件 */
            return false;
        }
    }else{
        if (level == "DEBUG" || level == "debug")
        {
            write_str = QString("[%1]:%2").arg("DEBUG_NOTIME").arg(message);
            txtOutput << write_str <<endl;
            if(qDebugFlag) qDebug() << write_str <<endl;
        }
        else if(level == "WARNING" || level == "warning")
        {
            write_str = QString("[%1]:%2").arg("WARNING_NOTIME").arg(message);
            txtOutput << write_str <<endl;
            if(qDebugFlag) qDebug() << write_str <<endl;
        }
        else if(level == "ERROR" || level == "error")
        {
            write_str = QString("[%1]:%2").arg("ERROR_NOTIME").arg(message);
            txtOutput << write_str <<endl;
            if(qDebugFlag) qDebug() << write_str <<endl;
        }
        else if(level == "INFO" || level == "info")
        {
            write_str = QString("[%1]:%2").arg("INFO_NOTIME").arg(message);
            txtOutput << write_str <<endl;
            if(qDebugFlag) qDebug() << write_str <<endl;
        }else
        {
            file.close();/* 关闭文件 */
            return false;
        }
    }
    file.close();/* 关闭文件 */
    return true;
}

.h文件

调用

LogSystem *log = new LogSystem();
log.setQdebugFlag(true);
log.start();


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
运维 监控 安全
在Linux系统中,认证日志
Linux系统中的认证日志对于安全监控和故障排查至关重要,常见的日志文件包括:`/var/log/auth.log`(Debian、Ubuntu)、`/var/log/secure`(RPM发行版)、`/var/log/lastlog`、`/var/log/faillog`、`/var/log/wtmp`和`/var/run/utmp`。这些文件记录登录尝试、失败、当前用户等信息。日志管理可通过文本编辑器、日志查看工具或`rsyslog`、`syslog-ng`等工具进行。注意日志位置可能因发行版和配置差异而变化,应确保日志文件的安全访问,并定期轮转归档以保护敏感信息和节省空间。
28 3
|
3天前
|
开发框架 Java 编译器
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
55 0
|
3天前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
144 3
|
3天前
|
Windows
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
3天前
|
监控 Linux 开发者
【专栏】`head`命令是Linux系统中用于快速查看文件开头内容的工具,常用于处理日志文件
【4月更文挑战第28天】`head`命令是Linux系统中用于快速查看文件开头内容的工具,常用于处理日志文件。基本用法包括指定查看行数(如`head -n 10 file.txt`)和与其他命令(如`grep`)结合使用。高级用法涉及动态查看日志、过滤内容、管道操作及在脚本中的应用。实际应用案例包括监控系统日志、排查错误和分析应用日志。使用时注意文件存在性、行数选择及权限问题。熟练掌握head命令能提升工作效率,结合其他工具可实现更多功能,助力Linux用户提升技能。
|
3天前
|
人工智能 Ubuntu 开发工具
【Ubuntu工具】避坑指南:搞坏一台电脑,终于在Ubuntu系统上成功源码安装了 QT WebEngine 5.15.13
【Ubuntu工具】避坑指南:搞坏一台电脑,终于在Ubuntu系统上成功源码安装了 QT WebEngine 5.15.13
47 0
|
3天前
|
人工智能 Ubuntu Shell
【Ubuntu工具】安装教程:Ubuntu系统上源码编译安装QT5.15.13(有坑)
【Ubuntu工具】安装教程:Ubuntu系统上源码编译安装QT5.15.13(有坑)
56 0
|
3天前
|
人工智能 Ubuntu C语言
【Ubuntu工具】详细图文教程:Ubuntu系统上安装QT6.2
【Ubuntu工具】详细图文教程:Ubuntu系统上安装QT6.2
39 0
|
3天前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
144 3
|
3天前
|
XML Java 开发者
【SpringBoot实战专题】「开发实战系列」全方位攻克你的技术盲区之SpringBoot整合众多日志管理系统服务starter-logging
【SpringBoot实战专题】「开发实战系列」全方位攻克你的技术盲区之SpringBoot整合众多日志管理系统服务starter-logging
51 1

推荐镜像

更多