ArgumentsHost,
HttpException,
HttpStatus, Logger
} from '@nestjs/common';
import { getClientIp } from 'request-ip';
import {performance} from "perf_hooks";
import { Response } from 'express';
@Catch()
export class CatchAllFilter implements ExceptionFilter {
private readonly logger = new Logger("Exception");
catch(exception: any, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse() as Response;
const request = ctx.getRequest();
const status =
exception instanceof HttpException
? exception.getStatus()
: HttpStatus.INTERNAL_SERVER_ERROR;
const stack = exception.stack.split('\n');
stack.shift();
this.logger.error(`<== ${request.logger_id} ${getClientIp(request)} ${request.url} ${((performance.now() - request.logger_now)/1000).toFixed(2)}sec ${status}`);
this.logger.error(JSON.stringify({
body: JSON.stringify(request.body).length>1024 ? '...body too long..' : request.body,
exception: exception.toString() }));
this.logger.error(stack);
return response.status(status).json(
exception instanceof HttpException ? exception.getResponse() :
{ statusCode: 500, message: exception.message, error: "Internal Server Error" });
}
}
спасибо! похоже на правду но у меня графкюель и ексепшен фильтр там до какой-то версии не дружил с ним - сейчас буду пробовать
https://stackoverflow.com/questions/73429309/nest-js-and-graphql-what-is-the-better-place-to-handle-errors-plugin-or-inter - можешь ответом закинут на мой вопрос =) может ещё кому-то пригодится
Обсуждают сегодня