New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@wing-logger/logger

Package Overview
Dependencies
Maintainers
0
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@wing-logger/logger

wing logger

latest
Source
npmnpm
Version
0.0.8
Version published
Maintainers
0
Created
Source

@wing-logger/logger

Install

$ npm i @wing-logger/logger

Usage

import Logger, { ConsoleAppender } from '@wing-logger/logger';

const logger = new Logger('MY_CATEGORY');
logger.addAppender(new ConsoleAppender(logger));

logger.fatal('Fatal', { name: 'fatal' }); // √
logger.error('Error', { name: 'error' }); // √
logger.warn('Warn', { name: 'warn' }); // √
logger.info('Info', { name: 'info' }); // √
logger.debug('Debug', { name: 'debug' }); // √
logger.trace('Trace', { name: 'trace' }); // √

// all 6 of the above will be output to the console

Level

The log level of the logger instance. Default with Level.ALl both in instance and global.

Instance Level

import Logger, { ConsoleAppender, Level } from '@wing-logger/logger';

const logger = new Logger('MY_CATEGORY', Level.Info);
logger.addAppender(new ConsoleAppender(logger));

logger.fatal('Fatal', { name: 'fatal' }); // √
logger.error('Error', { name: 'error' }); // √
logger.warn('Warn', { name: 'warn' }); // √
logger.info('Info', { name: 'info' }); // √

// `debug` and `trace` will `not` be output to the console when level set as `Level.Info`
logger.debug('Debug', { name: 'debug' }); // ×
logger.trace('Trace', { name: 'trace' }); // ×

Global Level

The global level will affect all instances.

import Logger, { ConsoleAppender, Level } from '@wing-logger/logger';

const logger = new Logger('MY_CATEGORY', Level.All);
logger.addAppender(new ConsoleAppender(logger));

// set global level as `Level.Error`
Logger.globalLevel = Level.Error;
// only `fatal` and `error` will be output to the console when global level set as `Level.Error`
logger.fatal('Fatal', { name: 'fatal' }); // √
logger.error('Error', { name: 'error' }); // √

logger.warn('Warn', { name: 'warn' }); // ×
logger.info('Info', { name: 'info' }); // ×
logger.debug('Debug', { name: 'debug' }); // ×
logger.trace('Trace', { name: 'trace' }); // ×

Appender

$ npm i @wing-logger/appender

Tips

  • Synchronization precedes asynchronization
  • Synchronization is performed on a first-come-first-served basis.

ConsoleAppender

The default console appender

import Logger, { ConsoleAppender, Level } from '@wing-logger/logger';
const logger = new Logger('MY_CATEGORY');
logger.addAppender(new ConsoleAppender(logger));

logger.fatal('Fatal', { name: 'fatal' });
logger.error('Error', { name: 'error' });
logger.warn('Warn', { name: 'warn' });
logger.info('Info', { name: 'info' });
logger.debug('Debug', { name: 'debug' });
logger.trace('Trace', { name: 'trace' });

Sync Appender

  • Generate a class that implements IAppender.

    import { type IAppender } from '@wing-logger/appender';
    import Logger, { Level } from '@wing-logger/logger';
    
    class SyncAppender1 implements IAppender {
      execute(level: Level, ...args: any[]) {
        console.log(`[Sync Appender_1] level=${level}`, ...args);
      }
    }
    
    class SyncAppender2 implements IAppender {
      execute(level: Level, ...args: any[]) {
        console.log(`[Sync Appender_2] level=${level}`, ...args);
      }
    }
    const logger = new Logger('MY_CATEGORY');
    
    logger.addAppender(new SyncAppender1());
    logger.addAppender(new SyncAppender2());
    
    logger.fatal('Fatal', { name: 'fatal' });
    logger.error('Error', { name: 'error' });
    logger.warn('Warn', { name: 'warn' });
    logger.info('Info', { name: 'info' });
    logger.debug('Debug', { name: 'debug' });
    logger.trace('Trace', { name: 'trace' });
    

Async Appender

  • Generate a class that extends Appender.

    class AsyncAppender1 extends Appender {
      constructor() {
        super((level: Level, ...args: any[]): Promise<boolean> => {
          return new Promise((resolve) => {
            const label = `[Async Appender] level=${level} ${JSON.stringify(args)} took`;
            console.time(label);
            setTimeout(() => {
              console.timeEnd(label);
              resolve(true);
            }, 0);
          });
        });
      }
    }
    
    class AsyncAppender2 extends Appender {
      constructor() {
        super((level: Level, ...args: any[]): Promise<boolean> => {
          console.log(`[Async Appender_2] level=${level}`, ...args);
          return Promise.resolve(true);
        });
      }
    }
    
  • Create an instance of Appender.

    function asyncExecuteHandler(level: Level, ...args: any[]): Promise<boolean> {
      console.log(`[Async ExecuteHandler] level=${level}`, ...args);
      return Promise.resolve(true);
    }
    

Async Appender Example:

import Appender from '@wing-logger/appender';
import Logger, { Level } from '@wing-logger/logger';
class AsyncAppender1 extends Appender {
  constructor() {
    super((level: Level, ...args: any[]): Promise<boolean> => {
      return new Promise((resolve) => {
        const label = `[Async Appender] level=${level} ${JSON.stringify(args)} took`;
        console.time(label);
        setTimeout(() => {
          console.timeEnd(label);
          resolve(true);
        }, 0);
      });
    });
  }
}
class AsyncAppender2 extends Appender {
  constructor() {
    super((level: Level, ...args: any[]): Promise<boolean> => {
      console.log(`[Async Appender_2] level=${level}`, ...args);
      return Promise.resolve(true);
    });
  }
}
function asyncExecuteHandler(level: Level, ...args: any[]): Promise<boolean> {
  console.log(`[Async ExecuteHandler] level=${level}`, ...args);
  return Promise.resolve(true);
}
const logger = new Logger('MY_CATEGORY');

logger.addAppender(new AsyncAppender1());
logger.addAppender(new AsyncAppender2());
logger.addAppender(new Appender(asyncExecuteHandler));

logger.fatal('Fatal', { name: 'fatal' });
logger.error('Error', { name: 'error' });
logger.warn('Warn', { name: 'warn' });
logger.info('Info', { name: 'info' });
logger.debug('Debug', { name: 'debug' });
logger.trace('Trace', { name: 'trace' });

Keywords

wing

FAQs

Package last updated on 25 Dec 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts