Я в значительной степени согласен с OrcunC, но я бы рекомендовал сделать его ofstream
немного более доступным и способным обрабатывать типы значений Qt.
Вот мой рекомендуемый процесс:
- Создайте глобальный QIODevice , в который все будет записано. Вероятно, это будет QFile.
- Создайте оболочку QTextStream вокруг этого QIODevice, который вы затем будете использовать для всей регистрации.
- Если вы хотите что-то более сложное, создайте методы, которые выполняют фильтрацию на основе информации уровня журнала.
Например:
// 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
}
И тогда вы, скорее всего, создадите enum, представляющий LogLevel, и сделаете что-то вроде этого:
#include "qlogger.h"
//...
setCurrentLogLevel(LogLevel::Warning);
*qLog(LogLevel::Debug) << "this will be filtered" << yourQMap;
*qLog(LogLevel::Critical) << "not filtered" << yourQString;
Поскольку вы будете иметь дело с глобальными переменными, внимательно рассмотрите проблемы управления памятью.