From d59993abf6c6503ffcc85d151bd59cf9015949c3 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 20 Aug 2025 19:00:41 +0300 Subject: [PATCH] fix(server): potential race condition when rotating logs --- apps/server/src/services/log.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/server/src/services/log.ts b/apps/server/src/services/log.ts index 542b16ad2..3d8cdd6b7 100644 --- a/apps/server/src/services/log.ts +++ b/apps/server/src/services/log.ts @@ -12,7 +12,7 @@ if (!fs.existsSync(dataDir.LOG_DIR)) { fs.mkdirSync(dataDir.LOG_DIR, 0o700); } -let logFile!: fs.WriteStream; +let logFile: fs.WriteStream | undefined; const SECOND = 1000; const MINUTE = 60 * SECOND; @@ -107,17 +107,20 @@ function initLogFile() { todaysMidnight = getTodaysMidnight(); const logPath = `${dataDir.LOG_DIR}/trilium-${formatDate()}.log`; + const isRotating = !!logFile; - if (logFile) { - logFile.end(); + if (isRotating) { + logFile!.end(); + } - // Clean up old log files when rotating to a new file + logFile = fs.createWriteStream(logPath, { flags: "a" }); + + // Clean up old log files when rotating to a new file + if (isRotating) { cleanupOldLogFiles().catch(() => { // Ignore cleanup errors }); } - - logFile = fs.createWriteStream(logPath, { flags: "a" }); } function checkDate(millisSinceMidnight: number) { @@ -141,7 +144,7 @@ function log(str: string | Error) { millisSinceMidnight = checkDate(millisSinceMidnight); - logFile.write(`${formatTime(millisSinceMidnight)} ${str}${EOL}`); + logFile!.write(`${formatTime(millisSinceMidnight)} ${str}${EOL}`); console.log(str); }