UNPKG

@wing-logger/logger

Version:
217 lines (172 loc) 5.96 kB
# @wing-logger/logger ## Install ```shell $ npm i @wing-logger/logger ``` ## Usage ```ts 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 ```ts 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. ```ts 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 ```shell $ npm i @wing-logger/appender ``` > Tips > > - Synchronization precedes asynchronization > - Synchronization is performed on a first-come-first-served basis. #### ConsoleAppender The default console appender ```ts 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. ```ts 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. ```ts 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); }); }); } } ``` ```ts 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`. ```ts function asyncExecuteHandler(level: Level, ...args: any[]): Promise<boolean> { console.log(`[Async ExecuteHandler] level=${level}`, ...args); return Promise.resolve(true); } ``` Async Appender Example: ```ts 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' }); ```