File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2525 "@nestjs/core" : " ^11.0.1" ,
2626 "@nestjs/mongoose" : " ^11.0.3" ,
2727 "@nestjs/platform-express" : " ^11.0.1" ,
28+ "@nestjs/swagger" : " ^11.1.5" ,
2829 "@types/joi" : " ^17.2.2" ,
2930 "dotenv" : " ^16.5.0" ,
3031 "joi" : " ^17.13.3" ,
3132 "mongoose" : " ^8.13.2" ,
3233 "reflect-metadata" : " ^0.2.2" ,
3334 "rxjs" : " ^7.8.1" ,
35+ "swagger-ui-express" : " ^5.0.1" ,
3436 "winston" : " ^3.17.0" ,
3537 "winston-daily-rotate-file" : " ^5.0.0"
3638 },
Original file line number Diff line number Diff line change 1+ import {
2+ ExceptionFilter ,
3+ Catch ,
4+ ArgumentsHost ,
5+ HttpException ,
6+ } from '@nestjs/common' ;
7+ import { Request , Response } from 'express' ;
8+ import { LoggerService } from '../logger/services/logger.service' ;
9+
10+ @Catch ( )
11+ export class AllExceptionsFilter implements ExceptionFilter {
12+ constructor ( private readonly logger : LoggerService ) { }
13+
14+ catch ( exception : unknown , host : ArgumentsHost ) {
15+ const ctx = host . switchToHttp ( ) ;
16+ const response = ctx . getResponse < Response > ( ) ;
17+ const request = ctx . getRequest < Request > ( ) ;
18+ const status =
19+ exception instanceof HttpException ? exception . getStatus ( ) : 500 ;
20+
21+ const message =
22+ exception instanceof Error ? exception . message : 'Internal server error' ;
23+ const stack = exception instanceof Error ? exception . stack : undefined ;
24+
25+ this . logger . error ( `[${ request . method } ] ${ request . url } - ${ message } ` , stack ) ;
26+
27+ response . status ( status ) . json ( {
28+ statusCode : status ,
29+ timestamp : new Date ( ) . toISOString ( ) ,
30+ path : request . url ,
31+ message,
32+ } ) ;
33+ }
34+ }
Original file line number Diff line number Diff line change 1+ import { Module } from '@nestjs/common' ;
2+ import { LoggerService } from './services/logger.service' ;
3+
4+ @Module ( {
5+ providers : [ LoggerService ] ,
6+ exports : [ LoggerService ] ,
7+ } )
8+ export class LoggerModule { }
Original file line number Diff line number Diff line change 1+ import { Injectable } from '@nestjs/common' ;
2+ import * as winston from 'winston' ;
3+ import 'winston-daily-rotate-file' ;
4+
5+ @Injectable ( )
6+ export class LoggerService {
7+ private readonly logger : winston . Logger ;
8+
9+ constructor ( ) {
10+ this . logger = winston . createLogger ( {
11+ level : 'info' ,
12+ format : winston . format . combine (
13+ winston . format . timestamp ( { format : 'YYYY-MM-DD HH:mm:ss' } ) ,
14+ winston . format . json ( ) ,
15+ ) ,
16+ transports : [
17+ new winston . transports . DailyRotateFile ( {
18+ filename : 'logs/app-%DATE%.log' ,
19+ datePattern : 'YYYY-MM-DD' ,
20+ zippedArchive : true ,
21+ maxFiles : '14d' ,
22+ } ) ,
23+ ] ,
24+ } ) ;
25+ }
26+
27+ log ( message : string ) {
28+ this . logger . info ( message ) ;
29+ }
30+
31+ error ( message : string , trace ?: string ) {
32+ this . logger . error ( { message, trace } ) ;
33+ }
34+ }
You can’t perform that action at this time.
0 commit comments