From b0671031f1bb2323cf057c0a9c6495d4fa1cc782 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 22 Sep 2020 11:28:05 +0200 Subject: [PATCH] feat: add void logger --- src/logging/VoidLogger.ts | 13 +++++++++++++ src/logging/VoidLoggerFactory.ts | 15 +++++++++++++++ test/unit/logging/VoidLogger.test.ts | 12 ++++++++++++ test/unit/logging/VoidLoggerFactory.test.ts | 14 ++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 src/logging/VoidLogger.ts create mode 100644 src/logging/VoidLoggerFactory.ts create mode 100644 test/unit/logging/VoidLogger.test.ts create mode 100644 test/unit/logging/VoidLoggerFactory.test.ts diff --git a/src/logging/VoidLogger.ts b/src/logging/VoidLogger.ts new file mode 100644 index 000000000..e154ab801 --- /dev/null +++ b/src/logging/VoidLogger.ts @@ -0,0 +1,13 @@ +import type { Logger } from './Logger'; +import type { LogLevel } from './LogLevel'; + +/** + * A logger that does nothing on a log message. + */ +export class VoidLogger implements Logger { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public log(level: LogLevel, message: string, meta?: any): Logger { + // Do nothing + return this; + } +} diff --git a/src/logging/VoidLoggerFactory.ts b/src/logging/VoidLoggerFactory.ts new file mode 100644 index 000000000..d596bbbb0 --- /dev/null +++ b/src/logging/VoidLoggerFactory.ts @@ -0,0 +1,15 @@ +import type { Logger } from './Logger'; +import type { LoggerFactory } from './LoggerFactory'; +import { VoidLogger } from './VoidLogger'; + +/** + * A factory that always returns {@link VoidLogger}, which does nothing on log messages. + */ +export class VoidLoggerFactory implements LoggerFactory { + private readonly logger = new VoidLogger(); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public createLogger(label: string): Logger { + return this.logger; + } +} diff --git a/test/unit/logging/VoidLogger.test.ts b/test/unit/logging/VoidLogger.test.ts new file mode 100644 index 000000000..b1058b5eb --- /dev/null +++ b/test/unit/logging/VoidLogger.test.ts @@ -0,0 +1,12 @@ +import { VoidLogger } from '../../../src/logging/VoidLogger'; + +describe('VoidLogger', (): void => { + let logger: VoidLogger; + beforeEach(async(): Promise => { + logger = new VoidLogger(); + }); + + it('does nothing when log is invoked.', async(): Promise => { + expect(logger.log('debug', 'my message', { abc: true })).toBe(logger); + }); +}); diff --git a/test/unit/logging/VoidLoggerFactory.test.ts b/test/unit/logging/VoidLoggerFactory.test.ts new file mode 100644 index 000000000..f46a57780 --- /dev/null +++ b/test/unit/logging/VoidLoggerFactory.test.ts @@ -0,0 +1,14 @@ +import { VoidLogger } from '../../../src/logging/VoidLogger'; +import { VoidLoggerFactory } from '../../../src/logging/VoidLoggerFactory'; + +describe('VoidLoggerFactory', (): void => { + let factory: VoidLoggerFactory; + beforeEach(async(): Promise => { + factory = new VoidLoggerFactory(); + }); + + it('creates VoidLoggers.', async(): Promise => { + const logger = factory.createLogger('MyLabel'); + expect(logger).toBeInstanceOf(VoidLogger); + }); +});