nest-request-interceptor
Version:
177 lines (129 loc) • 4.64 kB
Markdown
# Nest Request Interceptor
## Overview
`nest-request-interceptor` is a logging interceptor package for NestJS applications. It provides HTTP and RPC interceptors that log request and response details, including execution time, status codes, and error messages. The package also includes a decorator to skip logging when necessary.
## Features
- **HTTPInterceptor**: Logs HTTP requests and responses with status codes, execution times, and response sizes.
- **RPCInterceptor**: Logs RPC requests and responses, including message patterns and execution times.
- **SkipLogging Decorator**: Allows skipping logging for specific methods or controllers.
- **Custom Logging Utility**: Uses ANSI color-coded console logs for better readability.
## Installation
```sh
npm install nest-request-interceptor
```
## Usage
### Import the Interceptors
To enable logging for all requests in your NestJS application, register the interceptors globally.
```typescript
import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { HTTPInterceptor } from 'nest-request-interceptor';
import { RPCInterceptor } from 'nest-request-interceptor';
export class AppModule {}
```
### HTTP Server Bootstrap
For HTTP applications, register the HTTP interceptor in the main bootstrap function:
```typescript
import { NestFactory, Reflector } from "@nestjs/core";
import { ValidationPipe } from "@nestjs/common";
import { AppModule } from "./app.module";
import { HTTPInterceptor } from "nest-request-interceptor";
async function bootstrapHttp() {
const app = await NestFactory.create(AppModule);
const reflector = app.get(Reflector); // Get the Reflector instance, use it to enable skipping logging feature
app.useGlobalInterceptors(new HTTPInterceptor(reflector));
app.useGlobalPipes(new ValidationPipe({ whitelist: true, transform: true }));
await app.listen(3000);
console.log("HTTP server is running on: http://localhost:3000");
}
bootstrapHttp();
```
### RPC Server Bootstrap
For microservices using RabbitMQ or another transport, register the RPC interceptor:
```typescript
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import { RPCInterceptor } from "nest-request-interceptor";
import { Transport, MicroserviceOptions } from "@nestjs/microservices";
async function bootstrapRpc() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.RMQ,
options: {
urls: ["amqp://localhost:5672"],
queue: "main_queue",
queueOptions: { durable: false },
},
});
app.useGlobalInterceptors(new RPCInterceptor());
await app.listen();
console.log("RPC server is running and connected to RabbitMQ");
}
bootstrapRpc();
```
### Skip Logging for Specific Endpoints
Use the `@SkipLogging()` decorator to disable logging for specific methods or controllers.
```typescript
import { Controller, Get } from '@nestjs/common';
import { SkipLogging } from 'nest-request-interceptor';
export class ExampleController {
getData() {
return { message: 'This request will not be logged' };
}
}
```
Determines whether to skip logging (`true` to disable logging, `false` to keep logging active).
```typescript
import { Controller, Get } from "@nestjs/common";
import { SkipLogging } from "./decorators/skip-logging";
export class UserController {
// Logging is skipped for this method
hiddenRoute() {
return { message: "This request will not be logged" };
}
// Logging remains active for this method
publicRoute() {
return { message: "This request will be logged" };
}
}
```
### Logging Format
The logs are color-coded for easy readability:
- **Blue**: Incoming requests
- **Green**: Successful responses
- **Yellow**: Client errors (4xx)
- **Red**: Server errors (5xx)
Example output:
```sh
[ 2025/02/25 14:30:00 ] - REQUEST GET /users
[ 2025/02/25 14:30:01 ] - SEND GET /users 200 45ms
```
## API Reference
### `HTTPInterceptor`
- Logs HTTP requests and responses
- Shows execution time and response status
### `RPCInterceptor`
- Logs RPC requests and responses
- Captures message patterns and execution duration
### `SkipLogging`
- Decorator to disable logging on specific methods
## License
MIT License