Я пытаюсь создать модуль протоколирования, используя winston
в качестве рамки ведения журнала. Это позволяет мне указывать цвета, что довольно хорошо, если транспорт является Console
, но если бы я должен был определить два транспорта, один Console
, один 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;
Консоль будет выглядеть так:
[2018-06-12 15:54:14] info: Listening on port 9000
Где info
окрашивается в зеленый цвет, но если я combine.log
файл combine.log
, он будет отображаться как:
[2018-06-12 15:54:14] [32minfo[39m: Listening on port 9000
Возможно ли записывать исходный текст в файл, но все же показывать цвета в терминале?
Если нет, есть ли другая библиотека, которая позволяет это? Скажите bunyan
?
Я не знаю, нужна ли вам это больше, но поздно лучше, чем никогда.
В основном вам просто нужно отменить colorzie()
из общего формата, который вы определили, затем использовать его в colorzie()
транспортов, которые вы хотите показать цветом.
var options = {
console: {
handleExceptions: true,
level: 'debug',
format: combine(colorize(), myFormat)
},
verbose: {
filename: './logs/debug/mobile_api-%DATE%.log',
level: 'debug',
format: combine(myFormat)
},
}
const logger = winston.createLogger({
levels: myCustomLevels.levels,
transports: [
new transports.Console(options.console),
new transports.file(options.verbose),
]
});
При этом, когда журнал печатается в консоли, вы можете видеть цвет и при записи в файл, он вообще не будет отображать цветовой код.