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开发一个简单的、分级别并且按类记录日志的系统。你可以根据需要扩展这个系统,例如增加日志轮转、日志大小限制、更多的日志级别等功能。

1万+

被折叠的 条评论
为什么被折叠?



