@@ -65,16 +65,25 @@ void rotateLogFiles()
65
65
66
66
bool writeLogFile (const QByteArray &message)
67
67
{
68
- QFile f ( ::logFileName () );
69
- if ( !f.open (QIODevice::Append) )
70
- return false ;
68
+ static QFile f;
69
+ const auto fileName = ::logFileName ();
70
+ const bool isOpen = f.isOpen ();
71
+ if ( f.fileName () != fileName || !isOpen ) {
72
+ if (isOpen)
73
+ f.close ();
74
+ f.setFileName (fileName);
75
+ if ( !f.open (QIODevice::Append) )
76
+ return false ;
77
+ }
71
78
72
79
if ( f.write (message) <= 0 )
73
80
return false ;
74
81
75
- f.close ();
76
- if ( f.size () > logFileSize )
82
+ f.flush ();
83
+ if ( f.size () > logFileSize ) {
84
+ f.close ();
77
85
rotateLogFiles ();
86
+ }
78
87
79
88
return true ;
80
89
}
@@ -134,10 +143,12 @@ void logAlways(const QByteArray &msgText, const LogLevel level)
134
143
135
144
// Log to file and if needed to stderr.
136
145
if ( !writtenToLogFile || level <= LogWarning || hasLogLevel (LogDebug) ) {
137
- QFile ferr;
138
- ferr.open (stderr, QIODevice::WriteOnly);
146
+ static QFile ferr;
147
+ if (!ferr.isOpen ())
148
+ ferr.open (stderr, QIODevice::WriteOnly);
139
149
const auto simpleMsg = createSimpleLogMessage (msgText, level);
140
150
ferr.write (simpleMsg);
151
+ ferr.flush ();
141
152
}
142
153
}
143
154
@@ -231,7 +242,11 @@ bool dropLogsToFileCountAndSize(int maxFileCount, int keepMaxSize)
231
242
const auto begin = logFiles.cbegin () + maxFileCount;
232
243
for (auto it = begin; it != logFiles.cend (); ++it)
233
244
success = removeLogFile (*it) && success;
245
+ #if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
234
246
logFiles.erase (begin);
247
+ #else
248
+ logFiles.erase (logFiles.begin () + maxFileCount;);
249
+ #endif
235
250
}
236
251
237
252
if (keepMaxSize < 0 )
0 commit comments