diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 4248d26..9cc6f08 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,12 +1,17 @@ -import { Module } from '@nestjs/common'; +import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { SinusBotService } from "./services/sinusbot.service"; import { DatabaseService } from './database/database.service'; +import { LoggerMiddleware } from './logger.middleware'; @Module({ imports: [], controllers: [AppController], providers: [AppService, SinusBotService, DatabaseService], }) -export class AppModule {} +export class AppModule implements NestModule { + configure(consumer: MiddlewareConsumer): any { + consumer.apply(LoggerMiddleware).forRoutes('*') + } +} diff --git a/backend/src/logger.middleware.spec.ts b/backend/src/logger.middleware.spec.ts new file mode 100644 index 0000000..677d413 --- /dev/null +++ b/backend/src/logger.middleware.spec.ts @@ -0,0 +1,7 @@ +import { LoggerMiddleware } from './logger.middleware'; + +describe('LoggerMiddleware', () => { + it('should be defined', () => { + expect(new LoggerMiddleware()).toBeDefined(); + }); +}); diff --git a/backend/src/logger.middleware.ts b/backend/src/logger.middleware.ts new file mode 100644 index 0000000..466d09b --- /dev/null +++ b/backend/src/logger.middleware.ts @@ -0,0 +1,22 @@ +import { Injectable, NestMiddleware } from '@nestjs/common'; +import logger from 'src/logger/Logger'; +import { Request, Response, NextFunction } from 'express'; + +@Injectable() +export class LoggerMiddleware implements NestMiddleware { + use(request: Request, response: Response, next: NextFunction): void { + const { ip, method, originalUrl: url } = request; + const userAgent = request.get('user-agent') || ''; + + response.on('finish', () => { + const { statusCode } = response; + const contentLength = response.get('content-length'); + + logger.info( + `${method} ${url} ${statusCode} ${contentLength} - ${userAgent} ${ip}` + ); + }); + + next(); + } +}