From 3fb2f95e8a11249d5dfbd816fa9d8a1f18dce6f0 Mon Sep 17 00:00:00 2001 From: Flavio Fois Date: Thu, 5 Feb 2026 12:39:11 +0100 Subject: [PATCH] feat: implement console logger with backend integration and file logging --- frontend/src/lib/utils/logger-hook.ts | 56 +++++++++++++++++++++++ frontend/src/lib/wailsjs/go/main/App.d.ts | 2 + frontend/src/lib/wailsjs/go/main/App.js | 4 ++ frontend/src/routes/+layout.svelte | 2 + logger.go | 54 +++++++++++++++++++++- main.go | 5 ++ 6 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 frontend/src/lib/utils/logger-hook.ts diff --git a/frontend/src/lib/utils/logger-hook.ts b/frontend/src/lib/utils/logger-hook.ts new file mode 100644 index 0000000..e18b8c3 --- /dev/null +++ b/frontend/src/lib/utils/logger-hook.ts @@ -0,0 +1,56 @@ +import { FrontendLog } from '$lib/wailsjs/go/main/App'; + +function safeStringify(obj: any): string { + try { + if (typeof obj === 'object' && obj !== null) { + return JSON.stringify(obj); + } + return String(obj); + } catch (e) { + return '[Circular/Error]'; + } +} + +export function setupConsoleLogger() { + if ((window as any).__logger_initialized__) return; + (window as any).__logger_initialized__ = true; + + const originalLog = console.log; + const originalWarn = console.warn; + const originalError = console.error; + const originalInfo = console.info; + + function logToBackend(level: string, args: any[]) { + try { + // Avoid logging if wails runtime is not ready or function is missing + if (typeof FrontendLog !== 'function') return; + + const message = args.map(arg => safeStringify(arg)).join(' '); + FrontendLog(level, message).catch(() => {}); + } catch (e) { + // ignore + } + } + + console.log = (...args) => { + originalLog(...args); + logToBackend("INFO", args); + }; + + console.warn = (...args) => { + originalWarn(...args); + logToBackend("WARN", args); + }; + + console.error = (...args) => { + originalError(...args); + logToBackend("ERROR", args); + }; + + console.info = (...args) => { + originalInfo(...args); + logToBackend("INFO", args); + }; + + originalLog("Console logger hooked to Wails backend"); +} diff --git a/frontend/src/lib/wailsjs/go/main/App.d.ts b/frontend/src/lib/wailsjs/go/main/App.d.ts index 2db9d0a..c53e5d7 100644 --- a/frontend/src/lib/wailsjs/go/main/App.d.ts +++ b/frontend/src/lib/wailsjs/go/main/App.d.ts @@ -6,6 +6,8 @@ import {internal} from '../models'; export function CheckIsDefaultEMLHandler():Promise; +export function FrontendLog(arg1:string,arg2:string):Promise; + export function GetConfig():Promise; export function GetImageViewerData():Promise; diff --git a/frontend/src/lib/wailsjs/go/main/App.js b/frontend/src/lib/wailsjs/go/main/App.js index badfacd..228744d 100644 --- a/frontend/src/lib/wailsjs/go/main/App.js +++ b/frontend/src/lib/wailsjs/go/main/App.js @@ -6,6 +6,10 @@ export function CheckIsDefaultEMLHandler() { return window['go']['main']['App']['CheckIsDefaultEMLHandler'](); } +export function FrontendLog(arg1, arg2) { + return window['go']['main']['App']['FrontendLog'](arg1, arg2); +} + export function GetConfig() { return window['go']['main']['App']['GetConfig'](); } diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte index 0cd5cab..a27fe7b 100644 --- a/frontend/src/routes/+layout.svelte +++ b/frontend/src/routes/+layout.svelte @@ -1,9 +1,11 @@