crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Вывод отладочной информации, централизованно, аля qDebug, qCritical и ...
kwisp
  опции профиля:
сообщение 23.9.2010, 14:11
Сообщение #11


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


почему просто средствами ОС не перенаправить стандартный вывод куда надо?
Цитата(CodeHunter @ 23.9.2010, 13:21) *
Сегодня я уже второй рас вижу плохой пример !! ))) ну ничего у ViGOur есть и куча други хороших примеров !

это отличный пример централизированной работы с выводом в лог, очень гибкий пример.
сам использую qInstallMsgHandler практически во всех программах.
имею несколько обработчиков, установку которых регулирую через файл конфигурации один пишет в стандартный вывод, другой в syslog ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
CodeHunter
  опции профиля:
сообщение 23.9.2010, 17:21
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.8.2010
Пользователь №: 1982

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 23.9.2010, 13:55) *
Здесь же опять не понятно, чем этот комментарий мог бы помочь автору темы


Когда у нас есть объект класа дебага... Мы легко можем заменить qDebug() << "TEXT" на myDebug << "TEXT" Простой комбинацией найти + заменить

И мы получаем вывод в файл !!
А критикалы можно на другой объект заменить и получаем вывод в другой файл.

В результате мы получаем 2 файла (Дебаг + Лог ошибок) !


Цитата(Litkevich Yuriy @ 23.9.2010, 13:25) *
(как с итератором файлов)



А какие там противоречия ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 24.9.2010, 8:46
Сообщение #13


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(CodeHunter)
Когда у нас есть объект класа дебага... Мы легко можем заменить qDebug() << "TEXT" на myDebug << "TEXT" Простой комбинацией найти + заменить

И мы получаем вывод в файл !!
А критикалы можно на другой объект заменить и получаем вывод в другой файл.

В результате мы получаем 2 файла (Дебаг + Лог ошибок) !
И что мы получаем в итоге, что мы не можем перенаправить сообщения Qt, а только свои собственные. Мы не можем выводить всю отладочную информацию в один файл, потому что не сможем отделить сообщения разного вида. При этом вынуждены рыскать по проекту, что бы заменить один способ вывода информации на другой, вместо того, что бы делать это централизованно.

Т.е. ни одного плюса и куча минусов от твоего способа. Поэтому твой пример крайне не удачен.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
CodeHunter
  опции профиля:
сообщение 24.9.2010, 9:26
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.8.2010
Пользователь №: 1982

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 24.9.2010, 8:46) *
И что мы получаем в итоге, что мы не можем перенаправить сообщения Qt, а только свои собственные. Мы не можем выводить всю отладочную информацию в один файл, потому что не сможем отделить сообщения разного вида. При этом вынуждены рыскать по проекту, что бы заменить один способ вывода информации на другой, вместо того, что бы делать это централизованно.

Т.е. ни одного плюса и куча минусов от твоего способа. Поэтому твой пример крайне не удачен.



Смотри что человер хотел с самого начала и что ему дали !
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 24.9.2010, 9:32
Сообщение #15


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата
Смотри что человер хотел с самого начала и что ему дали !
Я то как раз и смотрю, в отличии от тебя. Ему дали идеальное решение его проблемы. Ты предлагаешь полную ерунду.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
CodeHunter
  опции профиля:
сообщение 24.9.2010, 9:43
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.8.2010
Пользователь №: 1982

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 24.9.2010, 9:32) *
Ему дали идеальное решение его проблемы.



Он хотел выводить инфу в файл !!!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 24.9.2010, 9:46
Сообщение #17


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


CodeHunter, да что ж ты какой не адекватный. Читай ассистент по поводу qInstallMsgHandler, потом спорь.
Тему закрываю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.9.2010, 10:17
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(igor_bogomolov @ 24.9.2010, 13:46) *
Тему закрываю.
не, закрывать не надо. У меня кой чего по ней есть, только писать пока времени нет.

Цитата(CodeHunter @ 24.9.2010, 13:43) *
Он хотел выводить инфу в файл !!!!!
и он её выводит, без изменения всех исходников. Просто есть обезьяний подход - исправление всех исходников, а есть программистский - установка глобального обработчика. Решение красивое и предусмотренное библиотекой Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sfour.aj
  опции профиля:
сообщение 26.2.2013, 6:31
Сообщение #19


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 26.2.2013
Пользователь №: 3728

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте. Вижу, что тема закрыта, но не я мог обойти столь напряженную дискуссию :rolleyes:
Я в каждом серьезном проекте использую вывод логов в файл, так называемую экстремальную отладку. Делаю я это через тот же MsgHandler, все отлично работает:

void myMessageOutput(QtMsgType type, const char *msg)
{
QFile fMessFile(qApp->applicationDirPath() + "/myProjectLog.log");
if(!fMessFile.open(QIODevice::Append | QIODevice::Text)){
return;
}
QString sCurrDateTime = "[" + QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm:ss.zzz") + "]";
QTextStream tsTextStream(&fMessFile);
switch(type){
case QtDebugMsg:
tsTextStream << QString("myProjectLogDebug%1: %2\n").arg(sCurrDateTime).arg(msg);
break;
case QtWarningMsg:
tsTextStream << QString("myProjectLogWarning%1: %2\n").arg(sCurrDateTime).arg(msg);
break;
case QtCriticalMsg:
tsTextStream << QString("myProjectLogCritical%1: %2\n").arg(sCurrDateTime).arg(msg);
break;
case QtFatalMsg:
tsTextStream << QString("myProjectLogFatal%1: %2\n").arg(sCurrDateTime).arg(msg);
abort();
}
tsTextStream.flush();
fMessFile.flush();
fMessFile.close();
}


Такой вариант меня еще ни разу не подводил. Хотя вариант с созданием переменной QDebug тоже вполне рабочий, этот будет более изящным (ИМХО)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.12.2024, 4:30