feat: add winston-based logger

This commit is contained in:
Ruben Taelman
2020-09-22 11:28:32 +02:00
committed by Ruben Taelman
parent b0671031f1
commit 5b825bc2d4
6 changed files with 315 additions and 6 deletions

View File

@@ -0,0 +1,18 @@
import { WinstonLogger } from '../../../src/logging/WinstonLogger';
describe('WinstonLogger', (): void => {
let innerLogger: any;
let logger: WinstonLogger;
beforeEach(async(): Promise<void> => {
innerLogger = {
log: jest.fn(),
};
logger = new WinstonLogger(innerLogger);
});
it('delegates log invocations to the inner logger.', async(): Promise<void> => {
expect(logger.log('debug', 'my message', { abc: true })).toBe(logger);
expect(innerLogger.log).toHaveBeenCalledTimes(1);
expect(innerLogger.log).toHaveBeenCalledWith('debug', 'my message', { abc: true });
});
});

View File

@@ -0,0 +1,43 @@
import { PassThrough } from 'stream';
import type { Logger } from 'winston';
import { WinstonLogger } from '../../../src/logging/WinstonLogger';
import { WinstonLoggerFactory } from '../../../src/logging/WinstonLoggerFactory';
describe('WinstonLoggerFactory', (): void => {
let factory: WinstonLoggerFactory;
beforeEach(async(): Promise<void> => {
factory = new WinstonLoggerFactory('debug');
});
it('creates WinstonLoggers.', async(): Promise<void> => {
const logger = factory.createLogger('MyLabel');
expect(logger).toBeInstanceOf(WinstonLogger);
const innerLogger: Logger = (logger as any).logger;
expect(innerLogger.level).toEqual('debug');
expect(innerLogger.format).toBeTruthy();
expect(innerLogger.transports).toHaveLength(1);
});
it('allows WinstonLoggers to be invoked.', async(): Promise<void> => {
// Create a dummy log transport
const transport: any = new PassThrough({ objectMode: true });
transport.write = jest.fn();
transport.log = jest.fn();
(factory as any).createTransports = (): any => [ transport ];
// Create logger, and log
const logger = factory.createLogger('MyLabel');
logger.log('debug', 'my message');
expect(transport.write).toHaveBeenCalledTimes(1);
expect(transport.write).toHaveBeenCalledWith({
label: 'MyLabel',
level: expect.stringContaining('debug'),
message: 'my message',
timestamp: expect.any(String),
[Symbol.for('level')]: 'debug',
[Symbol.for('splat')]: [ undefined ],
[Symbol.for('message')]: expect.any(String),
});
});
});