diff --git a/backend/.env.example b/backend/.env.example index c0c68b1c..165b7a29 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1 +1,11 @@ -PORT=3000 \ No newline at end of file +# +# 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 diff --git a/backend/src/config.ts b/backend/src/config.ts new file mode 100644 index 00000000..9edd1437 --- /dev/null +++ b/backend/src/config.ts @@ -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'; diff --git a/backend/src/logging/initalize.ts b/backend/src/logging/initalize.ts index 6a4d52c5..5da786fe 100644 --- a/backend/src/logging/initalize.ts +++ b/backend/src/logging/initalize.ts @@ -1,43 +1,45 @@ import { createLogger, format, Logger, transports } from 'winston'; import LokiTransport from 'winston-loki'; 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 = { source: 'Dwengo-Backend', - job: 'Dwengo-Backend', + service: 'API', host: 'localhost', }; let logger: Logger; -function initializeLogger() { +function initializeLogger(): Logger { if (logger !== undefined) { return logger; } const lokiTransport: LokiTransport = new LokiTransport({ - host: Host, + host: LOKI_HOST, labels: Labels, - level: LoggingLevel, + level: LOG_LEVEL, json: true, format: format.combine(format.timestamp(), format.json()), onConnectionError: (err) => { + // eslint-disable-next-line no-console console.error(`Connection error: ${err}`); }, }); const consoleTransport = new transports.Console({ - level: LoggingLevel, - format: format.combine(format.simple(), format.colorize()), + level: LOG_LEVEL, + format: format.combine(format.cli(), format.colorize()), }); logger = createLogger({ transports: [lokiTransport, consoleTransport], }); - logger.debug('Logger initialized'); + logger.debug( + `Logger initialized with level ${LOG_LEVEL}, Loki host ${LOKI_HOST}` + ); return logger; } diff --git a/backend/src/logging/responseTimeLogger.ts b/backend/src/logging/responseTimeLogger.ts index 5baf63f4..85723e5e 100644 --- a/backend/src/logging/responseTimeLogger.ts +++ b/backend/src/logging/responseTimeLogger.ts @@ -16,7 +16,6 @@ export function responseTimeLogger(req: Request, res: Response, time: number) { status: status, responseTime: Number(time), labels: { - origin: 'api', type: 'responseTime', }, }); diff --git a/backend/src/mikro-orm.config.ts b/backend/src/mikro-orm.config.ts index c4302a37..1beec07b 100644 --- a/backend/src/mikro-orm.config.ts +++ b/backend/src/mikro-orm.config.ts @@ -1,12 +1,20 @@ -import { Options } from '@mikro-orm/core'; +import { LoggerOptions, Options } from '@mikro-orm/core'; import { PostgreSqlDriver } from '@mikro-orm/postgresql'; +import { MikroOrmLogger } from './logging/mikroOrmLogger.js'; +import { LOG_LEVEL } from './config.js'; const config: Options = { driver: PostgreSqlDriver, dbName: 'dwengo', + password: 'postgres', entities: ['dist/**/*.entity.js'], entitiesTs: ['src/**/*.entity.ts'], - debug: true, + + // Logging + debug: LOG_LEVEL === 'debug', + loggerFactory: (options: LoggerOptions) => { + return new MikroOrmLogger(options); + }, }; export default config;