feel-logger
TypeScript icon, indicating that this package has built-in type declarations

2.1.9 • Public • Published

Feel Logger

This is my default configuration for winston logger.

NPM

Table of contents

Motivation

Winston is an incredible and versatile logging library. To simplify the configuration process and keep the logs consistent across projects, i decided to create this package to easily setup winston with my formats and configurations.

This package has two default transports: Console and Dayle Rotate File.

Quick Start

You just need to import Logger and call the init method and a Console logger will be created.

import { Logger } from 'feel-logger';
 
Logger.init();
Logger.info('My Awesome Logger!');
// output: 2020-07-12 13:43:05 [Application] INFO: My Awesome Logger!

To activate the Daily Rotate File just pass a configuration object to init method.

import { Logger } from 'feel-logger';
 
Logger.init({ file: true });
Logger.info('My Awesome Logger!');

This will create a /logs folder in the project root and store there the logs files.

Output Format

The output format is composed by a timestamp, a identifier label, the log level, the log message and the associated metadata.

 YYYY-MM-DD HH:MM:SS [label] LEVEL: message Meta: ...

Configuration

The configurations accepted by the Logger are:

property type default description
name string Application this will be the label
level string info the log level
exitOnError boolean false
handleException boolean false
transports Winston.Transports[] Console, Daily Rotate File custom transports to be add to the Logger
file boolean false active Dayle Rotate File transport
fileOptions DailyRotateFileTransportOptions null overrides default transport options
console WinstonLoggerOptions null overrides default transport options

Dynamic Initialization

To make the Logger instance static across the application you have to create a logger.options file. When the lib is loaded by node it will be search for a configuration file (.js or .ts) in the project. This dynamic initialization overrides init method.

    +-- root
    |   +-- src
    |   |   +-- configuration.options.[ts|js]
    |   +-- package.json

The configuration file accepts the same object as the init method, but make sure that your logger.options.[ts|js] is inside a src folder under the root directory and follow the conventions:

/* logger.options.js */
module.exports = {
    file: true,
};
/* logger.options.ts */
export default {
    file: true,
};

Now you can import Logger in any file and use without pass through injection.

/* AccountController */
import { Logger } from 'feel-logger';
 
export class AwesomeClass {
    AwesomeMethod() {
        Logger.info('Awesome Method Called');
    }
}

Logger Interface

The following is the methods for logging:

interface LoggerOperations {
    log: (level: string, message: string) => void;
    info: (message: string, ...meta: unknown[]) => void;
    warning: (message: string, ...meta: unknown[]) => void;
    error: (message: string, ...meta: unknown[]) => void;
    debug: (message: string, ...meta: unknown[]) => void;
}

Logging Context

If you want to add a context information to the output log you can pass a special metadata called context and it will be add to the label part of the log.

import { Logger } from 'feel-logger';
 
Logger.info('My Awesome Logger', { context: 'MyContext' });
// output: 2020-07-12 14:42:29 [Application - MyContext] INFO: My Awesome Logger

Logger Instance

If you initialize your Logger dynamically, you can create instances of the logger to set a default context.

import { Logger } from 'feel-logger';
 
const logger = Logger.createLoggerInstance('MyDefaultContext');
logger.info('My Awesome Logger');
// output: 2020-07-12 14:47:31 [Application - MyDefaultContext] INFO: My Awesome Logger

You can pass a class type as well.

import { Logger } from 'feel-logger';
 
export class MyAwesomeClass {
    logger = Logger.createLoggerInstance(MyAwesomeClass);
 
    log() {
        this.logger.info('My Awesome Logger');
    }
}
 
new MyAwesomeClass().log();
// output: 2020-07-12 14:47:31 [Application - MyAwesomeClass] INFO: My Awesome Logger

Winston Instance

You can get the winston instance object by calling the method:

import { Logger } from 'feel-logger';
const winston = Logger.getWinstonInstance();

Package Sidebar

Install

npm i feel-logger

Weekly Downloads

4

Version

2.1.9

License

ISC

Unpacked Size

22 kB

Total Files

16

Last publish

Collaborators

  • feelsantiago