An open API service indexing awesome lists of open source software.

https://github.com/dongitran/nestjs-mongodb-logger

📜 A fast and reliable MongoDB 🍃 logger for NestJS 🐈, built for production workloads.
https://github.com/dongitran/nestjs-mongodb-logger

logger logging mongodb nestjs typescript

Last synced: 5 months ago
JSON representation

📜 A fast and reliable MongoDB 🍃 logger for NestJS 🐈, built for production workloads.

Awesome Lists containing this project

README

          

# 🚀 NestJS MongoDB Logger

A production-ready MongoDB logging package for NestJS applications, featuring optimized batch processing and robust connection management.

[![CI](https://github.com/dongitran/nestjs-mongodb-logger/actions/workflows/ci.yml/badge.svg)](https://github.com/dongitran/nestjs-mongodb-logger/actions/workflows/ci.yml)

## ✨ Features

- **🔌 Reliable Connection**: Auto-reconnects with exponential backoff and connection pooling.
- **⚡ Optimized Batching**: Logs are batched and flushed based on size or time intervals to reduce database load.
- **🧩 Seamless NestJS Integration**: Simple setup with `forRoot` and `forRootAsync`.
- **🩺 Health Monitoring**: Includes a `HealthCheckService` to monitor the connection and batch processing status.
- **🕵️ Automatic Logging**: Provides a `LogInterceptor` to automatically log method calls, arguments, and results.

## 📊 Data Flow

```mermaid
graph TD
A[Your Application] -->|"Calls logger.log()"| B(MongoLoggerService);
B -->|"Adds to queue"| C{BatchManager};
C -->|"Flushes batch (on size/time)"| D[ConnectionManager];
D -->|"Writes to DB"| E((MongoDB));
```

## 📦 Installation

```bash
pnpm install nestjs-mongodb-logger
```

## 🚀 Quick Start

**1. Import the module:**

```typescript
// app.module.ts
import { Module } from '@nestjs/common';
import { MongoLoggerModule } from 'nestjs-mongodb-logger';

@Module({
imports: [
MongoLoggerModule.forRoot({
uri: 'your-mongodb-connection-string',
defaultCollection: 'app-logs',
batchSize: 100, // Optional: Default is 500
flushInterval: 5000, // Optional: Default is 5000ms
}),
],
})
export class AppModule {}
```

**2. Inject and use the service:**

```typescript
// any.service.ts
import { Injectable } from '@nestjs/common';
import { MongoLoggerService } from 'nestjs-mongodb-logger';

@Injectable()
export class MyService {
constructor(private readonly logger: MongoLoggerService) {}

doSomething() {
this.logger.log('my-logs', {
level: 'info',
message: 'User performed an action',
metadata: { userId: '123', context: 'Billing' }
});
}

handleError(error: Error) {
this.logger.logError('error-logs', error, { context: 'MyService' });
}
}
```

## ⚙️ Asynchronous Configuration

Use `forRootAsync` to configure the module with environment variables.

```typescript
// app.module.ts
import { ConfigModule, ConfigService } from '@nestjs/config';
import { MongoLoggerModule } from 'nestjs-mongodb-logger';

@Module({
imports: [
ConfigModule.forRoot(),
MongoLoggerModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
uri: configService.get('MONGO_URI'),
}),
inject: [ConfigService],
}),
],
})
export class AppModule {}
```

## 👨‍💻 Author

dongtran ✨

---

Made with ❤️ to make your work life easier!