All Projects → jukkahell → nestlogger

jukkahell / nestlogger

Licence: other
Logger library for NestJs services

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to nestlogger

nestjs-toolbox
The repository contains a suite of components and modules for Nest.js
Stars: ✭ 166 (+492.86%)
Mutual labels:  logger, nest, nestjs
Nestjs Pino
Platform agnostic logger for NestJS based on Pino with REQUEST CONTEXT IN EVERY LOG
Stars: ✭ 283 (+910.71%)
Mutual labels:  logger, nest, nestjs
nest-rest-mongo-boilerplate
🍱 backend with nest (typescript), mongoose, and authentication
Stars: ✭ 180 (+542.86%)
Mutual labels:  nest, nestjs
event-emitter
Event Emitter module for Nest framework (node.js) 🦋
Stars: ✭ 102 (+264.29%)
Mutual labels:  nest, nestjs
azure-storage
Azure Storage module for Nest framework (node.js) ☁️
Stars: ✭ 71 (+153.57%)
Mutual labels:  nest, nestjs
nestjs-otel
OpenTelemetry (Tracing + Metrics) module for Nest framework (node.js) 🔭
Stars: ✭ 273 (+875%)
Mutual labels:  nest, nestjs
rest-api-node-typescript
This is a simple REST API with node and express with typescript
Stars: ✭ 154 (+450%)
Mutual labels:  logger, winston
server-next
😎 The next generation of RESTful API service and more for Mix Space, powered by @nestjs.
Stars: ✭ 43 (+53.57%)
Mutual labels:  nest, nestjs
unnue-nuxt
开媛笔记,基于nuxt ssr首屏服务器端渲染 ⚡。用于分享、记录、交流和学习,希望可以帮助到小伙伴们。同时网站在永久更新,备好鸡血,一起来战 Ooh aah!
Stars: ✭ 98 (+250%)
Mutual labels:  nest, nestjs
necord
🤖 A module for creating Discord bots using NestJS, based on Discord.js
Stars: ✭ 77 (+175%)
Mutual labels:  nest, nestjs
axios
Axios module for Nest framework (node.js) 🗂
Stars: ✭ 95 (+239.29%)
Mutual labels:  nest, nestjs
nestjs-dynamoose
Dynamoose module for Nest
Stars: ✭ 84 (+200%)
Mutual labels:  nest, nestjs
azure-func-http
Azure Functions HTTP adapter for Nest framework (node.js) 🌥
Stars: ✭ 121 (+332.14%)
Mutual labels:  nest, nestjs
nestjs-rest-cqrs-example
Example for Nest.js, MySQL, Redis, REST api, CQRS, DDD
Stars: ✭ 263 (+839.29%)
Mutual labels:  nest, nestjs
nestjs-extensions
[WIP] A bunch of useful and opinionated filters, modules, pipes... to use with Nest framework. 😻
Stars: ✭ 43 (+53.57%)
Mutual labels:  nest, nestjs
aws-nestjs-starter
Serverless, AWS, NestJS, GraphQL and DynamoDB starter
Stars: ✭ 200 (+614.29%)
Mutual labels:  nest, nestjs
nestjs-redis
Redis(ioredis) module for NestJS framework
Stars: ✭ 112 (+300%)
Mutual labels:  nest, nestjs
azure-serverless-deprecated
[Deprecated] Azure Serverless module for Nest framework (node.js) 🌩
Stars: ✭ 44 (+57.14%)
Mutual labels:  nest, nestjs
nest-xray
Distributed tracing for Nestjs with AWS X-Ray as the backend. Instrument incoming and outgoing HTTP requests
Stars: ✭ 50 (+78.57%)
Mutual labels:  nest, nestjs
Firstsight
前后端分离,服务端渲染的个人博客,基于 Nodejs、 Vue、 Nuxt、Nestjs、PostgreSQL、Apollo
Stars: ✭ 19 (-32.14%)
Mutual labels:  nest, nestjs

Install

npm i nest-logger

TL;DR

Add this in your logger module's useFactory, inject LoggerService and start logging beautiful log entries.

const options: LoggerOptions = {
  fileOptions: {
    filename: `logs/my-service-%DATE%.log`,
  },
  colorize: config.colorize,
};
const loggers = LoggerService.getLoggers(
  [LoggerTransport.CONSOLE, LoggerTransport.ROTATE],
  options,
);

return new LoggerService(
  config.logLevel,
  loggers,
);

Detailed usage examples

Use in your project by creating a logger.module.ts with content like this:

import { Module } from "@nestjs/common";
import { ConfigModule } from "../config/config.module";
import { LoggerService, LoggerOptions } from "nest-logger";
import { ConfigService } from "../config/config.service";

@Module({
  imports: [ConfigModule],
  providers: [
    {
      provide: LoggerService,
      useFactory: (config: ConfigService) => {
        // getLoggers() is a helper function to get configured console and/or rotate logger transports.
        // It takes takes two parameters:
        // 1: Appenders where to log to: console or rotate or both in array
        //    (eg. [LoggerTransport.CONSOLE, LoggerTransport.ROTATE])
        // 2: Logger options object that contains the following properties:
        //    timeFormat?: winston's time format syntax. Defaults to "HH:mm:ss".
        //    colorize?: whether to colorize the log output. Defaults to true.
        //    consoleOptions?: see Winston's ConsoleTransportOptions interface
        //    fileOptions?: see Winston Daily Rotate File's DailyRotateFile.DailyRotateFileTransportOptions
        const options: LoggerOptions = {
          fileOptions: {
            filename: `${config.logger.path}/${config.serviceName}-%DATE%.log`,
          },
          colorize: config.colorize,
        };
        const loggers = LoggerService.getLoggers(
          config.logAppenders,
          options,
        );
        // LoggerService constructor will take two parameters:
        // 1. Log level: debug, info, warn or error
        // 2. List of logger transport objects.
        return new LoggerService(
          config.logLevel,
          loggers,
        );
      },
      inject: [ConfigService],
    },
  ],
  exports: [LoggerService],
})
export class LoggerModule {}

Overriding transport options per logger

You can do it like this if you want different options for console and file:

   const loggers = [
      LoggerService.console({
        timeFormat: "HH:mm",
        consoleOptions: {
          level: "info",
        },
      }),
      LoggerService.rotate({
        colorize: false,
        fileOptions: {
          filename: `${config.logger.path}/${config.serviceName}-%DATE%.log`,
          level: "error",
        },
      }),
   ];
   return new LoggerService(
      config.logger.defaultLevel,
      loggers,
   );

Overriding formatter function

Write a function that returns logform.Format object (it's the same what Winston uses):

const customFormatter = (options: LoggerOptions) => {
  const format = winston.format.printf(info => {
    const level = options.colorize ? this.colorizeLevel(info.level) : `[${info.level.toUpperCase()}]`.padEnd(7);
    return `${info.timestamp} ${context}${level}${reqId} ${info.message}`;
  });

  return winston.format.combine(
    winston.format.timestamp({
      format: options.timeFormat,
    }),
    format,
  );
}

Pass the formatter function as the third param of LoggerService's constructor

return new LoggerService(
  config.logLevel,
  loggers,
  customFormatter
);

Overriding winston logger options

Replace level parameter in the first argument of LoggerService's constructor.
Note that the transports option will be set from the loggers (second constructor parameter) so there's no use to override those here.

const myCustomLevels = {
  levels: {
    info: 0,
    warning: 1,
    error: 2,
    apocalypse: 3
  },
  colors: {
    info: 'blue',
    warning: 'green',
    error: 'yellow',
    apocalypse: 'red'
  }
};
const loggerOptions: winston.LoggerOptions = {
  level: config.logLevel,
  levels: customLevels,
}

return new LoggerService(
  loggerOptions,
  loggers,
  customFormatter
);

Using the logger

Import logger module wherever you need it:

...
import { LoggerModule } from "../logging/logger.module";

@Module({
  imports: [
    LoggerModule,
    DBModule,
  ],
  controllers: [ItemController],
  providers: [ItemService],
})
export class ItemModule {}

And log stuff:

import { LoggerService } from "nest-logger";
constructor(private readonly logger: LoggerService) {}

public logStuff() {
  this.logger.debug(`Found ${result.rowCount} items from db`, ItemService.name);
  this.logger.error(`Error while getting items from db`, err.stack, ItemService.name);
}

Release Notes

7.0.0

  • NestJS 7.6.11 -> 7.6.15
  • Merge 1.2.1 -> 2.1.1
  • RxJS 6.6.3 -> 7.0.0
  • etc. libs to the latest
  • Moment only needed in devDependencies

6.2.0

  • NestJS 7.4.4 -> 7.6.11
  • Axios 0.20.0 -> 0.21.1

6.1.0

  • Pass Winston logger options as an optional constructor parameter for LoggerService
  • Pass custom formatter function as an optional constructor parameter for LoggerService
  • NestJS 7.0.9 -> 7.4.4
  • Moment 2.25.3 -> 2.29.0
  • rxjs 6.5.4 -> 6.6.3
  • Typescript 3.8.3 -> 4.0.3
  • Winston 3.2.1 -> 3.3.3
  • Winston Daily Rotate File 4.4.2 -> 4.5.0

6.0.0

  • NestJS 6.10.14 -> 7.0.9
  • Updated other deps to the latest

5.0.1

  • Nullpointer fix to init loggers without passing any options (credits to OpportunityLiu)

5.0.0

  • Support for all winston logger options for console and rotate transports

4.0.1

  • Fixed a bug where default options were overridden after the first transport creation

4.0.0

  • More configurable way of initializing the logger

    Options can be passed as an object
    Colors can be disabled/enabled from the options

  • RxJs 6.5.2 -> 6.5.4

  • Nest 6.10.6 -> 6.10.14

  • Winston Daily Rotate File 4.3.0 -> 4.4.1

3.0.0

  • Log Map objects as key-value-pairs
  • Dependency upgrades
  • NestJS 6.3.2 -> 6.10.6
  • Winston Daily Rotate File 3.9.0 -> 4.3.0
  • Typescript 3.5.2 -> 3.7.3

2.1.0

  • NestJS 6.2.4 -> 6.3.2

2.0.0

  • Nest 5.6.2 -> 6.2.4
  • RxJs 6.4.0 -> 6.5.2
  • Winston Daily Rotate File 3.6.0 -> 3.9.0
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].