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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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日志并进行多维度分析。
相关文章
|
16天前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
1月前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
44 2
|
2月前
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
104 3
(13) Qt事件系统(two)
|
2月前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
58 1
|
2月前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
58 3
|
2月前
|
监控 应用服务中间件 网络安全
#637481#基于django和neo4j的日志分析系统
#637481#基于django和neo4j的日志分析系统
38 4
|
2月前
|
编解码 程序员
(12)Qt事件系统(one)
本文详细介绍了Qt事件系统,包括各种系统事件、鼠标事件、键盘事件、定时器等的处理方法和示例代码。
94 0
(12)Qt事件系统(one)
|
2月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
61 0
|
2月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
45 0
|
3月前
|
JSON 缓存 fastjson
一行日志引发的系统异常
本文记录了一行日志引发的系统异常以及作者解决问题的思路。