qt开发一个简单但的志系统

1.概要

1.需求

  • 开发一个针对c++的日志,
  • 可以分级别记录;
  • 不同类记录的日志文件不同

2.内容

开发一个针对C++的日志系统,可以分级别记录并且不同类记录的日志文件不同,是一个相对复杂的任务,但非常实用。你可以使用Qt框架来实现这个功能。以下是一个简单的实现示例,展示如何实现这些功能:

1. 创建日志类

首先,我们需要一个日志类来管理日志记录。这个类将支持不同的日志级别(例如:DEBUG、INFO、WARN、ERROR),并且可以根据类的名称将日志记录到不同的文件中。

#include <QFile>
#include <QTextStream>
#include <QMutex>
#include <QDateTime>
#include <QMap>
#include <QString>
#include <iostream>

enum LogLevel {
    DEBUG,
    INFO,
    WARN,
    ERROR
};

class Logger {
public:
    static Logger& instance() {
        static Logger instance;
        return instance;
    }

    void log(LogLevel level, const QString& className, const QString& message) {
        QMutexLocker locker(&mutex);

        QString logLevelStr;
        switch (level) {
            case DEBUG:
                logLevelStr = "DEBUG";
                break;
            case INFO:
                logLevelStr = "INFO";
                break;
            case WARN:
                logLevelStr = "WARN";
                break;
            case ERROR:
                logLevelStr = "ERROR";
                break;
        }

        QString logFileName = getLogFileName(className);
        QFile file(logFileName);
        if (!file.open(QIODevice::Append | QIODevice::Text)) {
            std::cerr << "Could not open log file: " << logFileName.toStdString() << std::endl;
            return;
        }

        QTextStream out(&file);
        out << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz") << " [" << logLevelStr << "] "
            << className << ": " << message << "\n";
    }

private:
    Logger() = default;
    ~Logger() = default;

    Logger(const Logger&) = delete;
    Logger& operator=(const Logger&) = delete;

    QString getLogFileName(const QString& className) {
        if (!logFiles.contains(className)) {
            logFiles[className] = className + "_log.txt";
        }
        return logFiles[className];
    }

    QMutex mutex;
    QMap<QString, QString> logFiles;
};

2. 使用日志类

接下来,我们在不同的类中使用这个日志类来记录日志。每个类的日志将记录到不同的文件中。

#include <iostream>

class MyClass1 {
public:
    void doSomething() {
        Logger::instance().log(DEBUG, "MyClass1", "This is a debug message.");
        Logger::instance().log(INFO, "MyClass1", "This is an info message.");
    }
};

class MyClass2 {
public:
    void doSomething() {
        Logger::instance().log(WARN, "MyClass2", "This is a warning message.");
        Logger::instance().log(ERROR, "MyClass2", "This is an error message.");
    }
};

int main() {
    MyClass1 obj1;
    obj1.doSomething();

    MyClass2 obj2;
    obj2.doSomething();

    return 0;
}

3. 编译和运行

确保你已经安装了Qt,并且配置好了开发环境。然后创建一个Qt控制台项目,将上述代码添加到你的项目中,编译并运行。

4. 日志输出

运行程序后,你会在当前目录下看到两个日志文件:MyClass1_log.txt 和 MyClass2_log.txt,它们分别记录了 MyClass1 和 MyClass2 的日志信息。

总结

这个示例展示了如何使用Qt开发一个简单的、分级别并且按类记录日志的系统。你可以根据需要扩展这个系统,例如增加日志轮转、日志大小限制、更多的日志级别等功能。

 3.关联链接

qt 如何区分日志的级别-优快云博客 

qt开发一个简单但的志系统-优快云博客

qt 的日志级别-优快云博客

qt 添加日志有多少种可选方案-优快云博客

Log4Qt常用方法举例-优快云博客

4.关联知识

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值