Я работаю с 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
Как сделать QDeBug () выходить в консоль и файл в C ++? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1758194563
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79767373/how-to-make-qdebug-output-to-both-console-and-a-file-in-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия