Добрый день.
Пытаюсь реализовать простой логгер - запись логов в файл и вывод их же на виджет.
Проблема в том, что QTextStream использует какой-то буфер, и если программа завершилась не корректно, то в файл ни чего не записывается. Или пропадает часть информации.
Это не допустимо, т.к. задача логгера сообщить мне после какой операции программа вылетела.
Для решения проблемы я поставил QTextStream.flush();
На сколько корректно так делать и есть ли альтернативы гарантирующие немедленную запись в файл?
Запуск логгирования:
bool LoggerClass::init(const QString &filename)
{
_logWidget = new LogWidget();
_logFile = new QFile( filename );
if( !_logFile->open( QFile::WriteOnly | QIODevice::Append | QIODevice::Unbuffered ) ) return false;
_logStream = new QTextStream(_logFile);
if( !(_logStream && _logStream->device()) ) return false;
log( "\n\n######################################################\n" );
log( QString("Runned at %1.").arg(QDateTime::currentDateTime().toString("dd.MM.yyyy")) );
log ( "\n");
return true;
}
Запись строки логов:
void LoggerClass::log(const QString &text )
{
if( _logStream && _logStream->device() ) {
*_logStream << text;
_logStream->flush(); // Наверное, это не корректно ???
} else {
_logWidget->addLog( "\n\nError write to log-file.\n\n" );
}
_logWidget->addLog( text );
}