Как сделать QDeBug () выходить в консоль и файл в C ++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как сделать QDeBug () выходить в консоль и файл в C ++?

Сообщение Anonymous »

Я работаю с C ++ и использую qdebug () для печати отладчиков сообщений. Я хотел бы знать, как я могу сделать выходные сообщения QDeBug () как в консоли, так и файл одновременно. Тем не менее, я хотел бы перенаправить этот вывод в файл журнала, не теряя возможности увидеть сообщения в консоли. < /P>
Как я могу достичь этого в qt? Что мне не хватает? Как я могу сделать выход QDebug () как в консоль (или вывод визуального вывода студии), так и в файл одновременно в приложении GUI? < /P>
Вот мой код. Он успешно выводит «тест» в файл, но не вывел его в консоли < /p>
#pragma once
#include
#include
#include
#include
#include
#include
#include

static QFile debugLogFile;
static QFile warningLogFile;
static QFile criticalLogFile;
static QFile fatalLogFile;
static QMutex logMutex;

void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) {
// 获取当前日期,用于创建日志文件夹
QString currentDate = QDateTime::currentDateTime().toString("yyyy-MM-dd");

// 构建日志文件夹路径
QString logDirPath = "../log/" + currentDate; // 存放日志的文件夹路径
QDir logDir;

// 确保文件夹存在,若不存在则创建
if (!logDir.exists(logDirPath)) {
logDir.mkpath(logDirPath); // 创建日期文件夹
}

// 根据日志类型选择文件,并确保文件只会打开一次
QFile* logFile = nullptr;
QString logFileName;
switch (type) {
case QtDebugMsg:
logFile = &debugLogFile;
logFileName = logDirPath + "/debug.log";
break;
case QtWarningMsg:
logFile = &warningLogFile;
logFileName = logDirPath + "/warning.log";
break;
case QtCriticalMsg:
logFile = &criticalLogFile;
logFileName = logDirPath + "/critical.log";
break;
case QtFatalMsg:
logFile = &fatalLogFile;
logFileName = logDirPath + "/fatal.log";
break;
}

// 确保文件按追加方式打开,且仅在第一次写入时打开文件
if (logFile && !logFile->isOpen()) {
logFile->setFileName(logFileName);
if (!logFile->open(QIODevice::WriteOnly | QIODevice::Append)) {
return;
}
}

// 锁住日志文件,确保线程安全
QMutexLocker locker(&logMutex);

QTextStream out(logFile);

// 写入时间和日志类型(单独一行)
out

Подробнее здесь: https://stackoverflow.com/questions/797 ... -file-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»