chore(backend): Duidelijkere MikroORM logging

Zorgt voor beter formaat en juiste labels
This commit is contained in:
Tibo De Peuter 2025-03-02 13:59:38 +01:00
parent e6c03c1aca
commit eca8d89712
Signed by: tdpeuter
GPG key ID: 38297DE43F75FFE2
5 changed files with 38 additions and 13 deletions

View file

@ -1 +1,11 @@
PORT=3000 #
# Basic configuration
#
PORT=3000 # The port the backend will listen on
#
# Advanced configuration
#
# LOKI_HOST=http://localhost:3102 # The address of the Loki instance, used for logging

6
backend/src/config.ts Normal file
View file

@ -0,0 +1,6 @@
// Logging
export const LOG_LEVEL: string =
'development' === process.env.NODE_ENV ? 'debug' : 'info';
export const LOKI_HOST: string =
process.env.LOKI_HOST || 'http://localhost:3102';

View file

@ -1,43 +1,45 @@
import { createLogger, format, Logger, transports } from 'winston'; import { createLogger, format, Logger, transports } from 'winston';
import LokiTransport from 'winston-loki'; import LokiTransport from 'winston-loki';
import { LokiLabels } from 'loki-logger-ts'; import { LokiLabels } from 'loki-logger-ts';
import { LOG_LEVEL, LOKI_HOST } from '../config.js';
const LoggingLevel = 'development' === process.env.NODE_ENV ? 'debug' : 'info';
const Host = 'http://localhost:3102';
const Labels: LokiLabels = { const Labels: LokiLabels = {
source: 'Dwengo-Backend', source: 'Dwengo-Backend',
job: 'Dwengo-Backend', service: 'API',
host: 'localhost', host: 'localhost',
}; };
let logger: Logger; let logger: Logger;
function initializeLogger() { function initializeLogger(): Logger {
if (logger !== undefined) { if (logger !== undefined) {
return logger; return logger;
} }
const lokiTransport: LokiTransport = new LokiTransport({ const lokiTransport: LokiTransport = new LokiTransport({
host: Host, host: LOKI_HOST,
labels: Labels, labels: Labels,
level: LoggingLevel, level: LOG_LEVEL,
json: true, json: true,
format: format.combine(format.timestamp(), format.json()), format: format.combine(format.timestamp(), format.json()),
onConnectionError: (err) => { onConnectionError: (err) => {
// eslint-disable-next-line no-console
console.error(`Connection error: ${err}`); console.error(`Connection error: ${err}`);
}, },
}); });
const consoleTransport = new transports.Console({ const consoleTransport = new transports.Console({
level: LoggingLevel, level: LOG_LEVEL,
format: format.combine(format.simple(), format.colorize()), format: format.combine(format.cli(), format.colorize()),
}); });
logger = createLogger({ logger = createLogger({
transports: [lokiTransport, consoleTransport], transports: [lokiTransport, consoleTransport],
}); });
logger.debug('Logger initialized'); logger.debug(
`Logger initialized with level ${LOG_LEVEL}, Loki host ${LOKI_HOST}`
);
return logger; return logger;
} }

View file

@ -16,7 +16,6 @@ export function responseTimeLogger(req: Request, res: Response, time: number) {
status: status, status: status,
responseTime: Number(time), responseTime: Number(time),
labels: { labels: {
origin: 'api',
type: 'responseTime', type: 'responseTime',
}, },
}); });

View file

@ -1,12 +1,20 @@
import { Options } from '@mikro-orm/core'; import { LoggerOptions, Options } from '@mikro-orm/core';
import { PostgreSqlDriver } from '@mikro-orm/postgresql'; import { PostgreSqlDriver } from '@mikro-orm/postgresql';
import { MikroOrmLogger } from './logging/mikroOrmLogger.js';
import { LOG_LEVEL } from './config.js';
const config: Options = { const config: Options = {
driver: PostgreSqlDriver, driver: PostgreSqlDriver,
dbName: 'dwengo', dbName: 'dwengo',
password: 'postgres',
entities: ['dist/**/*.entity.js'], entities: ['dist/**/*.entity.js'],
entitiesTs: ['src/**/*.entity.ts'], entitiesTs: ['src/**/*.entity.ts'],
debug: true,
// Logging
debug: LOG_LEVEL === 'debug',
loggerFactory: (options: LoggerOptions) => {
return new MikroOrmLogger(options);
},
}; };
export default config; export default config;