Giter Site home page Giter Site logo

nest-logger's Introduction

Nestjs Logger

Log component for NestJs.

Features

  • Nestjs log component encapsulated with Winston.
  • Free and flexible to define context.
  • Support print request context(Fastify only).

Installation

Yarn

yarn add @jiaxinjiang/nest-logger

NPM

npm install @jiaxinjiang/nest-logger --save

Getting Started

First, you need to define the log configuration file. You must rely on the @jiaxinjiang/nest-config module.

Directory structure:

├── env
│   ├── env
│   ├── env.dev
│   ├── env.prod
│   ├── env.test
├── src
│   ├── app.module.ts
│   ├── config
│       ├── logger.config.ts

Logger configuration file:

// logger.config.ts

import * as path from 'path';
import * as color from 'cli-color';
import { format, transports, LoggerOptions } from 'winston';
import DailyRotateFile = require('winston-daily-rotate-file');

const logDir = path.resolve(globalConfig.rootDir, '../logs');

export default {
  logDir,
  level: process.env.NEST_LOGGER_LEVEL || 'info',
  format: format.combine(
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }),
    format.printf(info => {
      // @ts-ignore
      if (info.message instanceof Error) {
        info.message = info.message.stack;
      }
      let levelMessage = `[${info.level.toLocaleUpperCase()}]`;
      switch (info.level) {
        case 'warn':
          levelMessage = color.yellow(levelMessage);
          break;
        case 'error':
          levelMessage = color.red(levelMessage);
          break;
        default:
          levelMessage = color.blue(levelMessage);
          break;
      }
      const pidMessage = color.green(`[Nest] ${process.pid}`);
      const ctxMessage = color.yellow(`[${info.context || 'DefaultContext'}]`);
      return `${pidMessage}   - ${info.timestamp}  ${ctxMessage} ${levelMessage} ${info.message}`;
    }),
  ),
  transports: [
    new DailyRotateFile({
      dirname: logDir,
      filename: `application.%DATE%.log`,
      datePattern: 'YYYYMMDD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d',
    }),
    new transports.Console(),
    new transports.File({
      dirname: logDir,
      filename: 'error.log',
      level: 'error',
    }),
  ],
} as LoggerOptions;

Let's register the log module in app.module.ts

import { Module } from '@nestjs/common';
import { LoggerModule } from '@jiaxinjiang/nest-logger';

@Module({
    imports: [
        LoggerModule.forRoot(),
    ],
})
export class AppModule {}

You can use @InjectLogger decorator to inject the logger instance;

import { InjectLogger, LoggerProvider } from '@jiaxinjiang/nest-logger';

@Injectable()
class SomeService {
    constructor(
      @InjectLogger(SomeService) private readonly logger: LoggerProvider
    ) {}

    test() {
      this.logger.log('hello world!')
    }
}

nest-logger's People

Contributors

jeniturtle avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.