2.0.27 • Published 2 years ago

nest-rabbitmq-appender v2.0.27

Weekly downloads
26
License
MIT
Repository
github
Last release
2 years ago

NestJS RabbitMQ Logger Appender

NPM Github Workflow Status Codecov Semantic-Release

Provide a rabbitmq logger appender like logback options style.

Inspired by spring-amqp project

Warning: In Beta

Usage

Installation

yarn add nest-rabbitmq-appender

Register Module

You should pass an AMQP connection option as register RabbitmqAppenderModule options at least with url and queue.

export type RabbitmqAppenderOptions = {
  url: string; // rabbitmq connection url
  queue: string; // rabbitmq logging queue
} & Partial<Options.Connect>;
import { Module } from '@nestjs/common';
import { RabbitmqAppenderModule } from 'nest-rabbitmq-appender';
import { ConfigService } from '@/config/config.service';
import { RemoteLogger } from '@/remote.logger';

@Module({
  imports: [
    ConfigModule,
    RabbitmqAppenderModule.forRootAsync({
      inject: [ConfigService],
      useFactory: (config: ConfigService) => config.loggingAppenderOptions // config.loggingAppenderOptions suppose be type of `RabbitmqAppenderOptions`
    })
  ]
})
export class AppModule {}

Use RemoteLogger extending NestJS Bundled logger

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { RemoteLogger } from 'nest-rabbitmq-appender';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    logger: false
  });
  app.useLogger(app.get(RemoteLogger));

  await app.listen(3000);
}
bootstrap();

Advanced Usage: Add Customize Data as HookFunction

RemoteLogger provided a public function: setHookFunction(hookFn) for advanced usage.

Mostly you want to add additional data when sending log data to remote message queue.

Like environment variables set from kubernetes (POD_ID,POD_UID...), or NODE_ENV in node.js application, or some dynamic value base on runtime status.

You should use an hookFunction to create additional properties when send to rabbitmq.

function hookFunction(message?:string, context?string){
  return {
    // calculate and return data according to your business logic
  }
}
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { RemoteLogger } from 'nest-rabbitmq-appender';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    logger: false
  });
  
  const remoteLogger = app.get(RemoteLogger);
  const hookFn = () => {
    return {
      NODE_ENV: process.env.NODE_ENV,
      NODE_IP: process.env.NODE_IP,
      // or any other data in context, it will merge with origin message
    }    
  };

  remoteLogger.setHookFunction(hookFn);
  app.useLogger(remoteLogger);

  await app.listen(3000);
}
bootstrap();
2.0.27

2 years ago

2.0.26

2 years ago

2.0.25

2 years ago

2.0.24

2 years ago

2.0.23

2 years ago

2.0.22

3 years ago

2.0.21

3 years ago

2.0.20

3 years ago

2.0.19

3 years ago

2.0.18

3 years ago

2.0.17

3 years ago

2.0.16

3 years ago

2.0.15

3 years ago

2.0.14

3 years ago

2.0.13

3 years ago

2.0.12

3 years ago

2.0.11

4 years ago

2.0.10

4 years ago

2.0.9

4 years ago

2.0.8

4 years ago

2.0.7

4 years ago

2.0.5

4 years ago

2.0.6

4 years ago

2.0.4

4 years ago

2.0.3

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago