From a8f6077fffbf77cde77cf7caad27dd402e250160 Mon Sep 17 00:00:00 2001 From: sebv Date: Tue, 4 Nov 2014 02:14:38 +0800 Subject: [PATCH] log stripColors fix --- lib/server/logger.js | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/server/logger.js b/lib/server/logger.js index 3b340c052..fa861f58f 100644 --- a/lib/server/logger.js +++ b/lib/server/logger.js @@ -30,8 +30,21 @@ var timestamp = function () { return date.toFormat("YYYY-MM-DD HH24:MI:SS:LL"); }; +// Strip the color marking within messages. +// We need to patch the transports, because the stripColor functionality in +// Winston is wrongly implemented at the logger level, and we want to avoid +// having to create 2 loggers. +function applyStripColorPatch(transport) { + var _log = transport.log.bind(transport); + transport.log = function (level, msg, meta, callback) { + var code = /\u001b\[(\d+(;\d+)*)?m/g; + msg = ('' + msg).replace(code, ''); + _log(level, msg, meta, callback); + }; +} + var _createConsoleTransport = function (args, logLvl) { - return new (winston.transports.Console)({ + var transport = new (winston.transports.Console)({ name: "console" , timestamp: args.logTimestamp ? timestamp : undefined , colorize: !args.logNoColors @@ -40,10 +53,12 @@ var _createConsoleTransport = function (args, logLvl) { , json: false , level: logLvl }); + if (args.logNoColors) applyStripColorPatch(transport); + return transport; }; var _createFileTransport = function (args, logLvl) { - return new (winston.transports.File)({ + var transport = new (winston.transports.File)({ name: "file" , timestamp: timestamp , filename: args.log @@ -54,6 +69,8 @@ var _createFileTransport = function (args, logLvl) { , level: logLvl } ); + applyStripColorPatch(transport); + return transport; }; var _createWebhookTransport = function (args, logLvl) { @@ -66,7 +83,7 @@ var _createWebhookTransport = function (args, logLvl) { port = parseInt(hostAndPort[1], 10); } - return new (winston.transports.Webhook)({ + var transport = new (winston.transports.Webhook)({ name: "webhook" , host: host || '127.0.0.1' , port: port || 9003 @@ -76,6 +93,8 @@ var _createWebhookTransport = function (args, logLvl) { , json: false , level: logLvl }); + applyStripColorPatch(transport); + return transport; }; var _createTransports = function (args) {