From 4dbef3fcd7a14437d55c555cf10d50de8e50d7d1 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Fri, 9 Dec 2022 11:57:12 +0900 Subject: feat: Move everything out of $lib --- code/app/src/help/logger.ts | 86 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 code/app/src/help/logger.ts (limited to 'code/app/src/help/logger.ts') diff --git a/code/app/src/help/logger.ts b/code/app/src/help/logger.ts new file mode 100644 index 0000000..a5b450b --- /dev/null +++ b/code/app/src/help/logger.ts @@ -0,0 +1,86 @@ +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); + } +} \ No newline at end of file -- cgit v1.3