Можно ещё через  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-поток)