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,19 @@
import type { Logger as WinstonInnerLogger } from 'winston';
import type { Logger } from './Logger';
import type { LogLevel } from './LogLevel';
/**
* A WinstonLogger implements the {@link Logger} interface using a given winston logger.
*/
export class WinstonLogger implements Logger {
private readonly logger: WinstonInnerLogger;
public constructor(logger: WinstonInnerLogger) {
this.logger = logger;
}
public log(level: LogLevel, message: string, meta?: any): this {
this.logger.log(level, message, meta);
return this;
}
}

View File

@@ -0,0 +1,37 @@
import { createLogger, format, transports } from 'winston';
import type * as Transport from 'winston-transport';
import type { Logger } from './Logger';
import type { LoggerFactory } from './LoggerFactory';
import { WinstonLogger } from './WinstonLogger';
/**
* Uses the winston library to create loggers for the given logging level.
* By default, it will print to the console with colorized logging levels.
*
* This creates instances of {@link WinstonLogger}.
*/
export class WinstonLoggerFactory implements LoggerFactory {
private readonly level: string;
public constructor(level: string) {
this.level = level;
}
public createLogger(label: string): Logger {
return new WinstonLogger(createLogger({
level: this.level,
format: format.combine(
format.label({ label }),
format.colorize(),
format.timestamp(),
format.printf(({ level: levelInner, message, label: labelInner, timestamp }: {[key: string]: any}): string =>
`${timestamp} [${labelInner}] ${levelInner}: ${message}`),
),
transports: this.createTransports(),
}));
}
protected createTransports(): Transport[] {
return [ new transports.Console() ];
}
}