From 9777ab8f27e78f2c4caf4c86c5998e2b54256330 Mon Sep 17 00:00:00 2001 From: regevbr Date: Thu, 7 May 2020 18:32:53 +0300 Subject: [PATCH] chore: use better typings of consola once they are fixed #63 --- src/utils/logger/impl/logger.ts | 20 +++- src/utils/logger/impl/loggerFactory.ts | 7 +- src/utils/logger/interfaces/ILogger.ts | 8 +- .../logger/interfaces/ILoggerSettings.ts | 5 +- test/common/logger.ts | 4 +- .../utils/logger/impl/loggerFactory.spec.ts | 98 ++++++++++++++++--- tools/utils/logger.ts | 4 +- 7 files changed, 114 insertions(+), 32 deletions(-) diff --git a/src/utils/logger/impl/logger.ts b/src/utils/logger/impl/logger.ts index 24409970..7e8d9f40 100644 --- a/src/utils/logger/impl/logger.ts +++ b/src/utils/logger/impl/logger.ts @@ -7,10 +7,6 @@ export class Logger extends Consola implements ILogger { super(options); } - public isLevelEnabled(level: LogLevel): boolean { - return this.level >= getConoslaLogLevel(level); - } - public isTraceEnabled(): boolean { return this.isLevelEnabled(LogLevel.TRACE); } @@ -26,4 +22,20 @@ export class Logger extends Consola implements ILogger { public isWarnEnabled(): boolean { return this.isLevelEnabled(LogLevel.WARN); } + + public isLogEnabled(): boolean { + return this.isLevelEnabled(LogLevel.LOG); + } + + public isErrorEnabled(): boolean { + return this.isLevelEnabled(LogLevel.ERROR); + } + + public isSilent(): boolean { + return this.isLevelEnabled(LogLevel.SILENT); + } + + private isLevelEnabled(level: LogLevel): boolean { + return this.level >= getConoslaLogLevel(level); + } } diff --git a/src/utils/logger/impl/loggerFactory.ts b/src/utils/logger/impl/loggerFactory.ts index 73d58132..a0e9ba5d 100644 --- a/src/utils/logger/impl/loggerFactory.ts +++ b/src/utils/logger/impl/loggerFactory.ts @@ -12,13 +12,10 @@ import { getConoslaLogLevel } from './logLevel'; @injectable() export class LoggerFactory extends ILoggerFactory { private readonly options: ConsolaOptions; - constructor(settings: ILoggerSettings) { + constructor({ logLevel }: ILoggerSettings) { super(); - const isDebug = settings.debugMode; - const isTrace = settings.traceMode; - const level = isTrace ? LogLevel.TRACE : isDebug ? LogLevel.DEBUG : LogLevel.INFO; this.options = { - level: getConoslaLogLevel(level), + level: getConoslaLogLevel(logLevel ?? LogLevel.INFO), reporters: [ new LogReporter({ secondaryColor: `grey`, diff --git a/src/utils/logger/interfaces/ILogger.ts b/src/utils/logger/interfaces/ILogger.ts index ec5ed45e..89e1f410 100644 --- a/src/utils/logger/interfaces/ILogger.ts +++ b/src/utils/logger/interfaces/ILogger.ts @@ -25,9 +25,11 @@ export interface ILogger { trace(...args: unknown[]): void; + isErrorEnabled(): boolean; + isWarnEnabled(): boolean; + isLogEnabled(): boolean; + isInfoEnabled(): boolean; isDebugEnabled(): boolean; isTraceEnabled(): boolean; - isInfoEnabled(): boolean; - isWarnEnabled(): boolean; - isLevelEnabled(level: LogLevel): boolean; + isSilent(): boolean; } diff --git a/src/utils/logger/interfaces/ILoggerSettings.ts b/src/utils/logger/interfaces/ILoggerSettings.ts index b1436c42..bc91f362 100644 --- a/src/utils/logger/interfaces/ILoggerSettings.ts +++ b/src/utils/logger/interfaces/ILoggerSettings.ts @@ -1,4 +1,5 @@ +import { LogLevel } from './ILogger'; + export abstract class ILoggerSettings { - public abstract readonly debugMode: boolean; - public abstract readonly traceMode: boolean; + public abstract readonly logLevel: LogLevel | undefined; } diff --git a/test/common/logger.ts b/test/common/logger.ts index 3a19c23f..d1552d10 100644 --- a/test/common/logger.ts +++ b/test/common/logger.ts @@ -1,8 +1,8 @@ import { LoggerFactory } from '../../src/utils/logger/impl/loggerFactory'; import { ILoggerFactory, ILoggerSettings } from '../../src/utils/logger'; +import { LogLevel } from '../../src/utils/logger/interfaces/ILogger'; export const loggerSettings: ILoggerSettings = { - debugMode: true, - traceMode: true, + logLevel: LogLevel.TRACE, }; export const loggerFactory: ILoggerFactory = new LoggerFactory(loggerSettings); diff --git a/test/src/utils/logger/impl/loggerFactory.spec.ts b/test/src/utils/logger/impl/loggerFactory.spec.ts index c9da4e4a..666b02b7 100644 --- a/test/src/utils/logger/impl/loggerFactory.spec.ts +++ b/test/src/utils/logger/impl/loggerFactory.spec.ts @@ -16,12 +16,17 @@ describe(`logger factory`, () => { }); it(`should set reporter`, async () => { const settings: ILoggerSettings = { - debugMode: true, - traceMode: true, + logLevel: undefined, }; const loggerFactory = new LoggerFactory(settings); const logger = loggerFactory.getLogger(`test`); - expect(logger.isTraceEnabled()).toBe(true); + expect(logger.isSilent()).toBe(false); + expect(logger.isTraceEnabled()).toBe(false); + expect(logger.isDebugEnabled()).toBe(false); + expect(logger.isInfoEnabled()).toBe(true); + expect(logger.isLogEnabled()).toBe(true); + expect(logger.isWarnEnabled()).toBe(true); + expect(logger.isErrorEnabled()).toBe(true); // @ts-ignore // eslint-disable-next-line no-underscore-dangle const reporters = logger._reporters; @@ -30,47 +35,112 @@ describe(`logger factory`, () => { }); it(`should set debug log level from settings`, async () => { const settings: ILoggerSettings = { - debugMode: true, - traceMode: false, + logLevel: LogLevel.DEBUG, }; const loggerFactory = new LoggerFactory(settings); const logger = loggerFactory.getLogger(`test`); - expect(logger.isDebugEnabled()).toBe(true); + expect(logger.isSilent()).toBe(false); expect(logger.isTraceEnabled()).toBe(false); + expect(logger.isDebugEnabled()).toBe(true); expect(logger.isInfoEnabled()).toBe(true); + expect(logger.isLogEnabled()).toBe(true); expect(logger.isWarnEnabled()).toBe(true); + expect(logger.isErrorEnabled()).toBe(true); }); it(`should set trace log level from settings`, async () => { const settings: ILoggerSettings = { - debugMode: false, - traceMode: true, + logLevel: LogLevel.TRACE, }; const loggerFactory = new LoggerFactory(settings); const logger = loggerFactory.getLogger(`test`); expect(logger).toBeInstanceOf(Consola); - expect(logger.isDebugEnabled()).toBe(true); + expect(logger.isSilent()).toBe(false); expect(logger.isTraceEnabled()).toBe(true); + expect(logger.isDebugEnabled()).toBe(true); expect(logger.isInfoEnabled()).toBe(true); + expect(logger.isLogEnabled()).toBe(true); expect(logger.isWarnEnabled()).toBe(true); + expect(logger.isErrorEnabled()).toBe(true); }); - it(`should not set debug log level from settings`, async () => { + it(`should not set info log level from settings`, async () => { const settings: ILoggerSettings = { - debugMode: false, - traceMode: false, + logLevel: LogLevel.INFO, }; const loggerFactory = new LoggerFactory(settings); const logger = loggerFactory.getLogger(`test`); + expect(logger.isSilent()).toBe(false); + expect(logger.isTraceEnabled()).toBe(false); + expect(logger.isDebugEnabled()).toBe(false); expect(logger.isInfoEnabled()).toBe(true); + expect(logger.isLogEnabled()).toBe(true); + expect(logger.isWarnEnabled()).toBe(true); + expect(logger.isErrorEnabled()).toBe(true); + }); + + it(`should not set log log level from settings`, async () => { + const settings: ILoggerSettings = { + logLevel: LogLevel.LOG, + }; + const loggerFactory = new LoggerFactory(settings); + const logger = loggerFactory.getLogger(`test`); + expect(logger.isSilent()).toBe(false); + expect(logger.isTraceEnabled()).toBe(false); expect(logger.isDebugEnabled()).toBe(false); + expect(logger.isInfoEnabled()).toBe(false); + expect(logger.isLogEnabled()).toBe(true); + expect(logger.isWarnEnabled()).toBe(true); + expect(logger.isErrorEnabled()).toBe(true); + }); + + it(`should not set warn log level from settings`, async () => { + const settings: ILoggerSettings = { + logLevel: LogLevel.WARN, + }; + const loggerFactory = new LoggerFactory(settings); + const logger = loggerFactory.getLogger(`test`); + expect(logger.isSilent()).toBe(false); expect(logger.isTraceEnabled()).toBe(false); + expect(logger.isDebugEnabled()).toBe(false); + expect(logger.isInfoEnabled()).toBe(false); + expect(logger.isLogEnabled()).toBe(false); expect(logger.isWarnEnabled()).toBe(true); + expect(logger.isErrorEnabled()).toBe(true); + }); + + it(`should not set error log level from settings`, async () => { + const settings: ILoggerSettings = { + logLevel: LogLevel.ERROR, + }; + const loggerFactory = new LoggerFactory(settings); + const logger = loggerFactory.getLogger(`test`); + expect(logger.isSilent()).toBe(false); + expect(logger.isTraceEnabled()).toBe(false); + expect(logger.isDebugEnabled()).toBe(false); + expect(logger.isInfoEnabled()).toBe(false); + expect(logger.isLogEnabled()).toBe(false); + expect(logger.isWarnEnabled()).toBe(false); + expect(logger.isErrorEnabled()).toBe(true); + }); + + it(`should not set silent log level from settings`, async () => { + const settings: ILoggerSettings = { + logLevel: LogLevel.SILENT, + }; + const loggerFactory = new LoggerFactory(settings); + const logger = loggerFactory.getLogger(`test`); + expect(logger.isSilent()).toBe(true); + expect(logger.isTraceEnabled()).toBe(false); + expect(logger.isDebugEnabled()).toBe(false); + expect(logger.isInfoEnabled()).toBe(false); + expect(logger.isLogEnabled()).toBe(false); + expect(logger.isWarnEnabled()).toBe(false); + expect(logger.isErrorEnabled()).toBe(false); }); it(`should cache logger`, async () => { const settings: ILoggerSettings = { - debugMode: true, - traceMode: false, + logLevel: undefined, }; const loggerFactory = new LoggerFactory(settings); const logger1 = loggerFactory.getLogger(`test`); diff --git a/tools/utils/logger.ts b/tools/utils/logger.ts index 3a19c23f..d1552d10 100644 --- a/tools/utils/logger.ts +++ b/tools/utils/logger.ts @@ -1,8 +1,8 @@ import { LoggerFactory } from '../../src/utils/logger/impl/loggerFactory'; import { ILoggerFactory, ILoggerSettings } from '../../src/utils/logger'; +import { LogLevel } from '../../src/utils/logger/interfaces/ILogger'; export const loggerSettings: ILoggerSettings = { - debugMode: true, - traceMode: true, + logLevel: LogLevel.TRACE, }; export const loggerFactory: ILoggerFactory = new LoggerFactory(loggerSettings);