69 lines
2.4 KiB
TypeScript
69 lines
2.4 KiB
TypeScript
import { DefaultLogger, LogContext, LoggerNamespace } from '@mikro-orm/core';
|
|
import { getLogger, Logger } from './initalize.js';
|
|
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,
|
|
};
|
|
}
|
|
}
|