gpt4 book ai didi

c++ - 实例化基于 Qt 文件的记录器以在 C++ 库中进行调试

转载 作者:太空狗 更新时间:2023-10-29 20:30:39 25 4
gpt4 key购买 nike

下一页为 file based logging in Qt for debugging 提供了一个很好的简单解决方案无需使用像其他 SO 问题中建议的那样更大的日志记录框架。

我正在编写一个库,并希望实例化一个记录器,供库中的类使用(主要用于调试目的)。没有 int main()功能,因为它是一个图书馆。所以最好的方法是将实例化添加到文件中,如 logger.h并有任何类(class)包括logger.h如果它想做qDebug() << PREFIX << "Bla"正如上面的链接所暗示的那样?

最佳答案

我非常同意 OrcunC,但我建议使 ofstream 更易于访问并且能够处理 Qt 值类型。

这是我推荐的流程:

  1. 创建全局 QIODevice一切都将被写入的那个。这可能是一个 QFile。
  2. 创建 QTextStream QIODevice 的包装器,然后您将用于所有日志记录。
  3. 如果您想要稍微复杂一点的东西,请创建根据日志级别信息进行过滤的方法。

例如:

// setup the global logger somewhere appropriate
QFile *file = new QFile("your.log");
file->open(QIODevice::ReadOnly);
QTextStream *qlogger = new QTextStream(file);

一旦初始化了全局记录器,您就可以将其作为全局引用:

#include "qlogger.h"
//... and within some method
*qlogger << "your log" << aQtValueType;

但您可能需要一些过滤:

#include "qlogger.h"
// lower number = higher priority
void setCurrentLogLevel(int level) {
globalLogLevel = level;
}
QTextStream* qLog(int level) {
if (level <= globalLogLevel) {
return qlogger;
}
return getNullLogger(); // implementation left to reader
}

然后您可能会创建一个代表 LogLevel 的枚举并执行如下操作:

#include "qlogger.h"
//...
setCurrentLogLevel(LogLevel::Warning);
*qLog(LogLevel::Debug) << "this will be filtered" << yourQMap;
*qLog(LogLevel::Critical) << "not filtered" << yourQString;

在处理全局变量时,请仔细考虑内存管理问题。

关于c++ - 实例化基于 Qt 文件的记录器以在 C++ 库中进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6252468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com