chore(backend): Loki configureren
De meeste console statements vervangen door Loki
This commit is contained in:
parent
0f8bd3df6a
commit
7fd6305fd9
8 changed files with 767 additions and 40 deletions
47
backend/src/logging/initalize.ts
Normal file
47
backend/src/logging/initalize.ts
Normal file
|
@ -0,0 +1,47 @@
|
|||
import { createLogger, format, Logger, transports } from 'winston';
|
||||
import LokiTransport from 'winston-loki';
|
||||
import { LokiLabels } from 'loki-logger-ts';
|
||||
|
||||
const LoggingLevel = 'development' === process.env.NODE_ENV ? 'debug' : 'info';
|
||||
const Host = 'http://localhost:3102';
|
||||
const Labels: LokiLabels = {
|
||||
source: 'Dwengo-Backend',
|
||||
job: 'Dwengo-Backend',
|
||||
host: 'localhost',
|
||||
};
|
||||
|
||||
let logger: Logger;
|
||||
|
||||
function initializeLogger() {
|
||||
if (logger !== undefined) {
|
||||
return logger;
|
||||
}
|
||||
|
||||
const lokiTransport: LokiTransport = new LokiTransport({
|
||||
host: Host,
|
||||
labels: Labels,
|
||||
level: LoggingLevel,
|
||||
json: true,
|
||||
format: format.combine(format.timestamp(), format.json()),
|
||||
onConnectionError: (err) => {
|
||||
console.error(`Connection error: ${err}`);
|
||||
},
|
||||
});
|
||||
|
||||
const consoleTransport = new transports.Console({
|
||||
level: LoggingLevel,
|
||||
format: format.combine(format.simple(), format.colorize()),
|
||||
});
|
||||
|
||||
logger = createLogger({
|
||||
transports: [lokiTransport, consoleTransport],
|
||||
});
|
||||
|
||||
logger.debug('Logger initialized');
|
||||
return logger;
|
||||
}
|
||||
|
||||
export function getLogger(): Logger {
|
||||
logger ||= initializeLogger();
|
||||
return logger;
|
||||
}
|
23
backend/src/logging/responseTimeLogger.ts
Normal file
23
backend/src/logging/responseTimeLogger.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { getLogger } from './initalize.js';
|
||||
import { Logger } from 'winston';
|
||||
import { Request, Response } from 'express';
|
||||
|
||||
export function responseTimeLogger(req: Request, res: Response, time: number) {
|
||||
const logger: Logger = getLogger();
|
||||
|
||||
const method = req.method;
|
||||
const url = req.url;
|
||||
const status = res.statusCode;
|
||||
|
||||
logger.info({
|
||||
message: 'Request completed',
|
||||
method: method,
|
||||
url: url,
|
||||
status: status,
|
||||
responseTime: Number(time),
|
||||
labels: {
|
||||
origin: 'api',
|
||||
type: 'responseTime',
|
||||
},
|
||||
});
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue