Russian Qt Forum
Сентябрь 30, 2024, 12:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перенаправления вывода в файл  (Прочитано 7908 раз)
TheMixa
Гость
« : Август 25, 2010, 11:38 »

Каким образом можно сделать чтобы все сообщения сыплющиеся в коносоль (предупреждения в коносоль, вывод от QProcess, от qDebug итд) перенаправить в файл, тем самым получив некий лог выполнения программы?

Необходимо централизованное решение а не отдельно для каждого случая.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Август 25, 2010, 11:50 »

Запусти в консоли:
program.exe > prog.log
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #2 : Август 25, 2010, 12:07 »

Можно ещё через  qInstallMsgHandler

Код
C++ (Qt)
#include <qapplication.h>
#include <stdio.h>
#include <stdlib.h>
#include <QDebug>
 
void myMessageOutput(QtMsgType type, const char *msg)
{
FILE *file; // указатель на файл, в который пишем
file = fopen("file.log", "a"); // открываем файл на запись
    switch (type) {
    case QtDebugMsg:
        fprintf(file, "Debug: %s\n", msg);
        break;
    case QtWarningMsg:
        fprintf(file, "Warning: %s\n", msg);
        break;
    case QtCriticalMsg:
        fprintf(file, "Critical: %s\n", msg);
        break;
    case QtFatalMsg:
        fprintf(file, "Fatal: %s\n", msg);
        abort();
    }
fclose(file); // закрываем файл
}
 
int main(int argc, char **argv)
{
    qInstallMsgHandler(myMessageOutput);
    QApplication app(argc, argv);
//     ...
qDebug() << "Zero";
    return app.exec();
}

Пример взят из документации и немного подправлен (в оригинале все перенаправляется в  stderr-поток)
« Последнее редактирование: Август 25, 2010, 12:11 от DOOMer » Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
BRE
Гость
« Ответ #3 : Август 25, 2010, 12:11 »

Код
C++ (Qt)
void myMessageOutput(QtMsgType type, const char *msg)
{
       ...
file = fopen("file.log", "a");
       ...
}
 
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #4 : Август 25, 2010, 12:13 »

BRE, да именно  так, чуть ошибся я спасмибо за поправку Улыбающийся
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
kobra
Гость
« Ответ #5 : Август 25, 2010, 17:05 »

а так:
Код:
freopen("out.txt","w",stdout);
не подойдет?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.183 секунд. Запросов: 22.