I am trying to create a logging module using winston
as the logging framework. It allows me to specify colors, which is quite nice if the transport is Console
, but if I were to define two transports, one Console
, one File
, it will actually save the terminal formatter string in the text, which will be saved in the file.
const { addColors, createLogger, format, transports } = require('winston');
const { combine, colorize, printf, timestamp } = format;
const logFormat = printf((info) => {
return `[${info.timestamp}] ${info.level}: ${info.message}`;
});
const rawFormat = printf((info) => {
return `[${info.timestamp}] ${info.level}: ${info.message}`;
});
const config = require('../config');
const logger = createLogger({
level: config.DEBUG,
format: combine(
colorize(),
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
logFormat,
),
transports: [
new transports.File({
filename: 'combined.log',
}),
new transports.Console({ format: combine(timestamp(), rawFormat) }),
],
});
addColors({
debug: 'white',
error: 'red',
info: 'green',
warn: 'yellow',
});
module.exports = logger;
Console will look like this:
[2018-06-12 15:54:14] info: Listening on port 9000
Where info
is colorized to green, but if i look at the combine.log
file, it will show as:
[2018-06-12 15:54:14] [32minfo[39m: Listening on port 9000
Is it possible to log raw text to a file, but still show colors in terminal?
If not, is there another library that allows for this? Say bunyan
?