summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop-electron/src/main/logging.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/desktop-electron/src/main/logging.ts')
-rw-r--r--packages/desktop-electron/src/main/logging.ts40
1 files changed, 40 insertions, 0 deletions
diff --git a/packages/desktop-electron/src/main/logging.ts b/packages/desktop-electron/src/main/logging.ts
new file mode 100644
index 000000000..d315b2d34
--- /dev/null
+++ b/packages/desktop-electron/src/main/logging.ts
@@ -0,0 +1,40 @@
+import log from "electron-log/main.js"
+import { readFileSync, readdirSync, statSync, unlinkSync } from "node:fs"
+import { dirname, join } from "node:path"
+
+const MAX_LOG_AGE_DAYS = 7
+const TAIL_LINES = 1000
+
+export function initLogging() {
+ log.transports.file.maxSize = 5 * 1024 * 1024
+ cleanup()
+ return log
+}
+
+export function tail(): string {
+ try {
+ const path = log.transports.file.getFile().path
+ const contents = readFileSync(path, "utf8")
+ const lines = contents.split("\n")
+ return lines.slice(Math.max(0, lines.length - TAIL_LINES)).join("\n")
+ } catch {
+ return ""
+ }
+}
+
+function cleanup() {
+ const path = log.transports.file.getFile().path
+ const dir = dirname(path)
+ const cutoff = Date.now() - MAX_LOG_AGE_DAYS * 24 * 60 * 60 * 1000
+
+ for (const entry of readdirSync(dir)) {
+ const file = join(dir, entry)
+ try {
+ const info = statSync(file)
+ if (!info.isFile()) continue
+ if (info.mtimeMs < cutoff) unlinkSync(file)
+ } catch {
+ continue
+ }
+ }
+}