From e8a41ec27ab5009df78e54da8a65679b3919871c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Tue, 30 May 2023 16:09:59 +0200 Subject: [PATCH] Add logger based on winston library --- logging/WinstonLogger.ts | 61 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 logging/WinstonLogger.ts diff --git a/logging/WinstonLogger.ts b/logging/WinstonLogger.ts new file mode 100644 index 0000000..e63dc52 --- /dev/null +++ b/logging/WinstonLogger.ts @@ -0,0 +1,61 @@ +import winston from 'winston'; +import SharedConfig from '../config/SharedConfig'; +import * as Transport from 'winston-transport'; + + +const levels = { + error: 0, + warn : 1, + info : 2, + http : 3, + debug: 4 +}; + +const colors = { + error: 'red', + warn : 'yellow', + info : 'green', + http : 'magenta', + debug: 'white' +}; +winston.addColors(colors); + +const format = winston.format.combine(winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), SharedConfig.production ? winston.format.uncolorize() : winston.format.colorize({ all: true }), winston.format.printf((info) => `${ info.timestamp } [${ process.pid }] ${ info.level }: ${ info.message }`)); + +const commonTransportOptions = { + handleRejections: true, + handleExceptions: true +}; + +let transports: Array<Transport> = [ new winston.transports.Console({ + ...commonTransportOptions, + level: 'debug' + }) ]; + +if ( SharedConfig.production ) { + const commonFileOptions = { + ...commonTransportOptions, + maxsize : 5242880, // 5MB + maxFiles: 100, + tailable: true + }; + + transports = transports.concat([ new winston.transports.File({ + ...commonFileOptions, + filename: `${ SharedConfig.logsFolder }/error.log`, + level : 'error' + }), new winston.transports.File({ + ...commonFileOptions, + filename: `${ SharedConfig.logsFolder }/all.log`, + level : 'debug' + }) ]); +} + +const logger = winston.createLogger({ + levels, + format, + transports, + exitOnError: false + }); + +export default logger; -- GitLab