diff --git a/logging/WinstonLogger.ts b/logging/WinstonLogger.ts new file mode 100644 index 0000000000000000000000000000000000000000..e63dc521e1f2d36278a246fc2dbc202a5956a4d2 --- /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;