logging-chiper
TypeScript icon, indicating that this package has built-in type declarations

2.1.0 • Public • Published

Logging Chiper

Table of Contents

Description

This simple module offers a way to use some functionalities from the logging-chiper.

Motivation

As company we want to standardize the way we log our application, so that's we wrote this module to make it easier to log our application.

Requirements

  1. Nodejs LTS.
  2. GOOGLE_APPLICATION_CREDENTIALS defined with the file path as environment variable.

Usage

Install

npm i logging-chiper -S -E

OR

yarn add logging-chiper -S -E

Initialization

To initialize the logger you need call the init function at start point of your application, using the following parameters:

// import the class from the library
import { Logger } from 'logging-chiper';

Logger.init({
  projectId: 'your-project-id',
  service: 'your-service-name',
  version: '0.0.1',
});

Parameters

As we want to standardize the way we log our application, so we defined a base structure as input parameters to accomplish this:

// Log method
Logger.getInstance().log({
  stt: 'my-stt', // name of the stt owner
  context: 'my-context', // name of the class or file (optional)
  functionName: 'my-function', // name of the function (optional)
  message: 'my-message', // message to log
  data: { // data to log (optional)
    storeId: '' + 123456,
    responseCode: '' + 200,
    testField: 'test',
    extraField: 'extra',
  },
});

// Warn method
Logger.getInstance().warn({
  stt: 'my-stt', // name of the stt owner
  context: 'my-context', // name of the class or file (optional)
  functionName: 'my-function', // name of the function (optional)
  message: 'my-message', // message to log
  data: { // data to log (optional)
    storeId: '' + 123456,
    responseCode: '' + 200,
    testField: 'test',
    extraField: 'extra',
  },
});

// Error method
Logger.getInstance().error({
  stt: 'my-stt', // name of the stt owner
  context: 'my-context', // name of the class or file (optional)
  functionName: 'my-function', // name of the function (optional)
  message: 'my-message', // message to log
  error, // the exception to log that just occurred
  data: { // data to log (optional)
    storeId: '' + 123456,
    responseCode: '' + 200,
    testField: 'test',
    extraField: 'extra',
  },
});

As you can see, all the methods follows almost the same structure, but when you want to log an error, you need to pass the error as parameter.

Examples

Simple Log

import { Logger } from 'logging-chiper';

const bootstrap = () => {
  Logger.init({
    projectId: 'your-project-id',
    service: 'your-service-name',
    version: '0.0.1',
  });

  Logger.getInstance().log({
    stt: 'solutions',
    context: 'main.ts',
    functionName: 'bootstrap',
    message: 'this is a log message...',
  });
};
}

bootstrap();

Log Requests

With Express

import { createMiddleware } from 'logging-chiper';
import express, { Request, Response } from 'express';
import { AddressInfo } from 'net';
import { LoggingWinston } from '@google-cloud/logging-winston';
import { transports } from 'winston';

const app = express();

createMiddleware([ // creates the middleware
  new transports.Console(), // logs to console
  new LoggingWinston({ // logs to gpc 
    projectId: "chiper-development",
    logName: "myapp"
  })
]).then((mw) => {

  app.use(mw); // setup middler into express

  app.get('/info', (req: Request, res: Response) => {
    (req as any).log.info("get Hello World!"); // Using log from request
    res.status(200).send('Hello World!');
  });

  const server = app.listen(3000, () => {
    const address = (server.address() as AddressInfo)
    mw.logger.info(`running at http://${address.address}:${address.port}`); // use the logger from mw.
  });

});

With NestJS

  • You need the create an interceptor for logging:

app.logmiddleware.ts

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
import { createMiddleware } from 'logging-chiper';
import { LoggingWinston } from '@google-cloud/logging-winston';
import { transports } from 'winston';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  async use(req: Request, res: Response, next: NextFunction) {
    const mw = await createMiddleware([ // creates the middleware
        new transports.Console(), // logs to console
        new LoggingWinston({ // logs to gpc 
        projectId: "chiper-development",
        logName: "myapp"
        })
    ])
    mw(req, res, next);
  }
}
  • And then configure in the module:

app.module.ts

import { MiddlewareConsumer, Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from "./app.loggermiddleware";

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes('*');
  }
}

Readme

Keywords

none

Package Sidebar

Install

npm i logging-chiper

Weekly Downloads

327

Version

2.1.0

License

ISC

Unpacked Size

19.1 kB

Total Files

10

Last publish

Collaborators

  • cristiandi.chiper