Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: TheMixa от Август 25, 2010, 11:38



Название: Перенаправления вывода в файл
Отправлено: TheMixa от Август 25, 2010, 11:38
Каким образом можно сделать чтобы все сообщения сыплющиеся в коносоль (предупреждения в коносоль, вывод от QProcess, от qDebug итд) перенаправить в файл, тем самым получив некий лог выполнения программы?

Необходимо централизованное решение а не отдельно для каждого случая.


Название: Re: Перенаправления вывода в файл
Отправлено: Пантер от Август 25, 2010, 11:50
Запусти в консоли:
program.exe > prog.log


Название: Re: Перенаправления вывода в файл
Отправлено: DOOMer от Август 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();
}

Пример взят из документации (http://doc.crossplatform.ru/qt/4.5.0/qtglobal.html#qInstallMsgHandler) и немного подправлен (в оригинале все перенаправляется в  stderr-поток)


Название: Re: Перенаправления вывода в файл
Отправлено: BRE от Август 25, 2010, 12:11
Код
C++ (Qt)
void myMessageOutput(QtMsgType type, const char *msg)
{
       ...
file = fopen("file.log", "a");
       ...
}
 


Название: Re: Перенаправления вывода в файл
Отправлено: DOOMer от Август 25, 2010, 12:13
BRE, да именно  так, чуть ошибся я спасмибо за поправку :)


Название: Re: Перенаправления вывода в файл
Отправлено: kobra от Август 25, 2010, 17:05
а так:
Код:
freopen("out.txt","w",stdout);
не подойдет?