import {browser, dev} from "$app/environment"; import {StorageKeys} from "$configuration"; import pino from "pino"; const pinoConfig = dev ? { transport: { target: "pino-pretty", }, } : {}; const pinoLogger = pino(pinoConfig); function browser_log_level(): number { if (browser) return LogLevel.to_number(sessionStorage.getItem(StorageKeys.logLevel), LogLevel.INFO); throw new Error("Called browser api in server"); } function server_log_level(): number { if (!browser) return LogLevel.to_number(import.meta.env.VITE_LOG_LEVEL, LogLevel.ERROR); throw new Error("Called server api in browser"); } export const LogLevel = { DEBUG: 0, INFO: 1, ERROR: 2, SILENT: 3, to_string(levelInt: number): string { switch (levelInt) { case 0: return "DEBUG"; case 1: return "INFO"; case 2: return "ERROR"; case 3: return "SILENT"; default: throw new Error("Log level int is unknown"); } }, to_number(levelString?: string | null, fallback?: number): number { if (!levelString && fallback) return fallback; else if (!levelString && !fallback) throw new Error("levelString was empty, and no fallback was specified"); switch (levelString?.toUpperCase()) { case "DEBUG": return 0; case "INFO": return 1; case "ERROR": return 2; case "SILENT": return 3; default: if (!fallback) throw new Error("Log level string is unknown"); else return fallback; } }, }; export function log_debug(message: string, ...additional: any[]): void { if (browser && browser_log_level() <= LogLevel.DEBUG) { pinoLogger.debug(message, additional); } if (!browser && server_log_level() <= LogLevel.DEBUG) { pinoLogger.debug(message, additional); } } export function log_info(message: string, ...additional: any[]): void { if (browser && browser_log_level() <= LogLevel.INFO) { pinoLogger.info(message, additional); } if (!browser && server_log_level() <= LogLevel.INFO) { pinoLogger.info(message, additional); } } export function log_error(message: any, ...additional: any[]): void { if (browser && browser_log_level() <= LogLevel.ERROR) { pinoLogger.error(message, additional); } if (!browser && server_log_level() <= LogLevel.ERROR) { pinoLogger.error(message, additional); } }