0.0.8 • Published 7 months ago

@wing-logger/logger v0.0.8

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
7 months ago

@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' });
0.0.8

7 months ago

0.0.5

7 months ago

0.0.4

7 months ago

0.0.7

7 months ago

0.0.6

7 months ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago