From e6c03c1acaa216f5dc3115a45506700bab49f4fa Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 2 Mar 2025 13:58:08 +0100 Subject: [PATCH] chore(backend): Definieer logger voor MikroORM Maak gebruik van juiste logging niveau voor elke taak (namespace) --- backend/src/logging/mikroOrmLogger.ts | 88 +++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 backend/src/logging/mikroOrmLogger.ts diff --git a/backend/src/logging/mikroOrmLogger.ts b/backend/src/logging/mikroOrmLogger.ts new file mode 100644 index 00000000..4fbadb96 --- /dev/null +++ b/backend/src/logging/mikroOrmLogger.ts @@ -0,0 +1,88 @@ +import { DefaultLogger, LogContext, LoggerNamespace } from '@mikro-orm/core'; +import { Logger } from 'winston'; +import { getLogger } from './initalize'; +import { LokiLabels } from 'loki-logger-ts'; + +export class MikroOrmLogger extends DefaultLogger { + private logger: Logger = getLogger(); + + log(namespace: LoggerNamespace, message: string, context?: LogContext) { + if (!this.isEnabled(namespace, context)) { + return; + } + + switch (namespace) { + case 'query': + this.logger.debug( + this.createMessage(namespace, message, context) + ); + break; + case 'query-params': + // TODO Which log level should this be? + this.logger.info( + this.createMessage(namespace, message, context) + ); + break; + case 'schema': + this.logger.info( + this.createMessage(namespace, message, context) + ); + break; + case 'discovery': + this.logger.debug( + this.createMessage(namespace, message, context) + ); + break; + case 'info': + this.logger.info( + this.createMessage(namespace, message, context) + ); + break; + case 'deprecated': + this.logger.warn( + this.createMessage(namespace, message, context) + ); + break; + default: + switch (context?.level) { + case 'info': + this.logger.info( + this.createMessage(namespace, message, context) + ); + break; + case 'warning': + this.logger.warn(message); + break; + case 'error': + this.logger.error(message); + break; + default: + this.logger.debug(message); + break; + } + } + } + + private createMessage( + namespace: LoggerNamespace, + messageArg: string, + context?: LogContext + ) { + const labels: LokiLabels = { + service: 'ORM', + }; + + let message: string; + if (context?.label) { + message = `[${namespace}] (${context?.label}) ${messageArg}`; + } else { + message = `[${namespace}] ${messageArg}`; + } + + return { + message: message, + labels: labels, + context: context, + }; + } +}