import * as winston from "winston"; import { transports as winstonTransports } from "winston"; import * as Transport from 'winston-transport'; export type LogLevel = "error" | "warn" | "info" | "verbose" | "debug" | "silly"; export interface LoggerOptions { logLevel: LogLevel transports?: Transport[], } export abstract class Logger { abstract error(message: string, meta?: any): Logger; abstract warn(message: string, meta?: any): Logger; abstract info(message: string, meta?: any): Logger; abstract verbose(message: string, meta?: any): Logger; abstract debug(message: string, meta?: any): Logger; abstract silly(message: string, meta?: any): Logger; } export function createLogger({ logLevel, transports }: LoggerOptions) { return winston.createLogger({ level: logLevel, format: winston.format.json(), transports: [ new winstonTransports.Console({ level: logLevel }), ...(transports ? transports : []), ], }); }