Skip to content

Commit df10e9c

Browse files
committed
Keep log files open
1 parent 9963a76 commit df10e9c

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

src/common/log.cpp

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,25 @@ void rotateLogFiles()
6565

6666
bool writeLogFile(const QByteArray &message)
6767
{
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+
}
7178

7279
if ( f.write(message) <= 0 )
7380
return false;
7481

75-
f.close();
76-
if ( f.size() > logFileSize )
82+
f.flush();
83+
if ( f.size() > logFileSize ) {
84+
f.close();
7785
rotateLogFiles();
86+
}
7887

7988
return true;
8089
}
@@ -134,10 +143,12 @@ void logAlways(const QByteArray &msgText, const LogLevel level)
134143

135144
// Log to file and if needed to stderr.
136145
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);
139149
const auto simpleMsg = createSimpleLogMessage(msgText, level);
140150
ferr.write(simpleMsg);
151+
ferr.flush();
141152
}
142153
}
143154

@@ -231,7 +242,11 @@ bool dropLogsToFileCountAndSize(int maxFileCount, int keepMaxSize)
231242
const auto begin = logFiles.cbegin() + maxFileCount;
232243
for (auto it = begin; it != logFiles.cend(); ++it)
233244
success = removeLogFile(*it) && success;
245+
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
234246
logFiles.erase(begin);
247+
#else
248+
logFiles.erase(logFiles.begin() + maxFileCount;);
249+
#endif
235250
}
236251

237252
if (keepMaxSize < 0)

0 commit comments

Comments
 (0)