aboutsummaryrefslogtreecommitdiffstats
path: root/code/app/src/lib/logger.ts
diff options
context:
space:
mode:
Diffstat (limited to 'code/app/src/lib/logger.ts')
-rw-r--r--code/app/src/lib/logger.ts86
1 files changed, 86 insertions, 0 deletions
diff --git a/code/app/src/lib/logger.ts b/code/app/src/lib/logger.ts
new file mode 100644
index 0000000..df0a821
--- /dev/null
+++ b/code/app/src/lib/logger.ts
@@ -0,0 +1,86 @@
+import { browser, dev } from "$app/environment";
+import { StorageKeys } from "$lib/configuration";
+import pino from "pino";
+
+const pinoConfig = dev ? {
+ transport: {
+ target: "pino-pretty",
+ }
+} : {};
+
+const pinoLogger = pino(pinoConfig);
+
+function browserLogLevel(): number {
+ if (browser) return LogLevel.toNumber(sessionStorage.getItem(StorageKeys.logLevel), LogLevel.INFO);
+ throw new Error("Called browser api in server");
+}
+
+function serverLogLevel(): number {
+ if (!browser) return LogLevel.toNumber(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,
+ toString(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");
+ }
+ },
+ toNumber(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 logDebug(message: string, ...additional: any[]): void {
+ if (browser && browserLogLevel() <= LogLevel.DEBUG) {
+ pinoLogger.debug(message, additional);
+ }
+ if (!browser && serverLogLevel() <= LogLevel.DEBUG) {
+ pinoLogger.debug(message, additional);
+ }
+}
+
+export function logInfo(message: string, ...additional: any[]): void {
+ if (browser && browserLogLevel() <= LogLevel.INFO) {
+ pinoLogger.info(message, additional);
+ }
+ if (!browser && serverLogLevel() <= LogLevel.INFO) {
+ pinoLogger.info(message, additional);
+ }
+}
+
+export function logError(message: any, ...additional: any[]): void {
+ if (browser && browserLogLevel() <= LogLevel.ERROR) {
+ pinoLogger.error(message, additional);
+ }
+ if (!browser && serverLogLevel() <= LogLevel.ERROR) {
+ pinoLogger.error(message, additional);
+ }
+} \ No newline at end of file