Я пытаюсь раскрасить вывод консоли, и это не работает. На выходе все одного (белого) цвета. У меня 3.0.0-rc1.
const winston = require('winston');
const logLevels = {
levels: {
error: 0,
warn: 1,
info: 2,
http: 3,
sql: 4,
debug: 5
},
colors: {
error: "red",
warn: "darkred",
info: "black",
http: "green",
sql: "blue",
debug: "gray"
}
};
winston.addColors(logLevels);
const logger = winston.createLogger({...});
logger.add(new winston.transports.Console({colorize: true}));
Я также пробовал предложение здесь , но это тоже не работает:
logger.add(new winston.transports.Console({format: winston.format.combine(formatter, winston.format.colorize())}));
Спасибо,
Альваро
Я смог заставить его частично работать, используя документацию для logform .
const alignedWithColorsAndTime = winston.format.combine(
winston.format.colorize(),
winston.format.timestamp(),
winston.format.align(),
winston.format.printf(info => `${info.timestamp} [${info.level}]: ${info.message}`),
);
Не уверен, как обрабатывать дамп аргументов JSON.
const alignedWithColorsAndTime = winston.format.combine(
winston.format.colorize(),
winston.format.timestamp(),
winston.format.align(),
winston.format.printf((info) => {
const {
timestamp, level, message, ...args
} = info;
const ts = timestamp.slice(0, 19).replace('T', ' ');
return `${ts} [${level}]: ${message} ${Object.keys(args).length ? JSON.stringify(args, null, 2) : ''}`;
}),
);
Через два часа мне удалось заставить цвета работать, спасибо @Xeoncross !
запустил винстон и тоже получил консоль без цветов...
я использовал следующий код определения транспорта:
new winston.transports.Console({
format: winston.format.simple()
})
после прочтения этой темы сделал так:
new winston.transports.Console({
format: winston.format.combine(
winston.format.simple(),
winston.format.colorize()
)
})
и не получил никакой разницы.
поэтому я изменил положение формата раскраски на 1-е, и цвета заработали.
new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
)
})
Спасибо @abrakadobr ! это помогло.
у меня здесь ничего не сработало, по-прежнему нет цветов, а смещение раскраски вверх привело к тому, что информационное поле регистрировало закодированные строки
Я создал суть , которая показывает, как использовать ведение журнала Winston & Morgan в простом приложении ExpressJS.
Спасибо @Xeoncross! Добавление winston.format.colorize() в мой формат сработало. Интересно, что этого нет в документах. Или, по крайней мере, я не мог найти его в документах.
Мне нравится новая гибкость, но я надеюсь, что она получит лучшую документацию. Я просто потратил слишком много времени, чтобы заставить это работать. Пример plug-n-play для тех из нас, кто использовал winston.cli()
, имел бы большое значение, что-то похожее на пример @Xeoncross.
Кто-нибудь знает, как это сделать с текущей версией релиза? Версия кандидата на выпуск не является вариантом.
При чтении кода вы также можете отправить all
colorize
в качестве опции, чтобы раскрасить весь журнал.
colorize({ all: true })
@markhealey Я уже удалил зависимость winston из моего package.json, а затем прочитал ваше сообщение. Спасибо :+1:
Спасибо @Xeoncross. Взгляните на: https://github.com/winstonjs/logform/blob/master/timestamp.js . Вы можете отформатировать временную метку с параметром format
opt. Но будьте осторожны с часовым поясом
format.combine(
format.colorize(),
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.align(),
format.printf(info => {
const { timestamp, level, message, ...extra } = info;
return `${timestamp} [${level}]: ${message} ${
Object.keys(extra).length ? JSON.stringify(extra, null, 2) : ''
}`;
}),
)
format.colorize({all:true}
на самом деле не работает, если включена метка времени, вот рабочий пример, чтобы раскрасить всю строку:
const colorizer = winston.format.colorize();
const logger = winston.createLogger({
level: 'debug',
format: combine(
winston.format.timestamp(),
winston.format.simple(),
winston.format.printf(msg =>
colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
)
),
transports: [
new transports.Console(),
]
});
проверить мой полнофункциональный регистратор
Спасибо @abrakadobr , ваше решение сработало для меня.
@tommuhm Теперь я вижу дефект. Для colorize
нет встроенной опции формата, если вы действительно хотите раскрасить весь printf
. Имеет ли это смысл для вас?
const { createLogger, format, transports } = require('../');
const logger = createLogger({
level: 'debug',
format: format.combine(
format.timestamp(),
format.simple(),
format.printf(info => `${info.timestamp} - ${info.level}: ${info.message}`),
format.colorize({ all: true })
),
transports: [
new transports.Console(),
]
});
logger.error('wowza');
Хитрость заключается в том, что colorizer
известен, когда info
был "сериализован" (т.е. когда info[MESSAGE]
был установлен в строку). Последующий PR до logform
ближайшее время — спасибо, что покопались в этом!
@Xeoncross мы также можем добиться того же гораздо более простым способом.
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, colorize, printf } = format;
const level = process.env.LOG_LEVEL || 'debug';
const myFormat = printf(({ level, message, label, timestamp }) => {
return `${timestamp} ${level}: ${message}`;
});
const logger = createLogger({
format: combine(colorize(), timestamp(), myFormat),
transports: [new transports.Console()]
});
ссылка: https://www.npmjs.com/package/winston#using-custom-logging-levels
Я использую winston для входа в облачные часы и пытаюсь добавить цвет, но вместо цветных символов появляются .. Я пробую все решения, упомянутые выше. ниже мой код
const winston = require('winston');
const {transports, format, createLogger } = winston;
const { combine,errors,timestamp} = format;
const colorizer = winston.format.colorize();
const logger = createLogger({
level: process.env.LOG_LEVEL,
prettyPrint : true,
format: combine(
winston.format.timestamp(),
winston.format.simple(),
winston.format.printf(msg =>
colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
)
),
transports: [
new transports.Console()
]
});
module.exports = {logger};
а в консоли облачных часов вывод
[34m2019-08-22T13:00:03.325Z - debug: res by id: [
{
"isActive": true,
"value": "fNUMheWiwXayKsaYCbUeA7Gg7BtEPIUbakB56XH1",
"id": "oehlwqlcve",
"userId": "6b347b41-ddef-4842-83a0-1cd5ca358482"
}
][39m
это [39м появляется вместо цвета. Любое предложение?
-22T13:00:03.325Z - отладка: разрешение по id: [
У меня такая же проблема. Вам удалось это исправить?
-22T13:00:03.325Z - отладка: разрешение по id: [
У меня такая же проблема. Вам удалось это исправить?
Есть новости по этому поводу? Вы ее как-то решили?
@Xeoncross мы также можем добиться того же гораздо более простым способом.
const { createLogger, format, transports } = require('winston'); const { combine, timestamp, colorize, printf } = format; const level = process.env.LOG_LEVEL || 'debug'; const myFormat = printf(({ level, message, label, timestamp }) => { return `${timestamp} ${level}: ${message}`; }); const logger = createLogger({ format: combine(colorize(), timestamp(), myFormat), transports: [new transports.Console()] });
ссылка: https://www.npmjs.com/package/winston#using-custom-logging-levels
Это помогло мне в iTerm на MacOS
Ниже ссылка сработала для меня:
https://stackoverflow.com/questions/51012150/winston-3-0-colorize-whole-output-on-console
Самый полезный комментарий
Я смог заставить его частично работать, используя документацию для logform .
Не уверен, как обрабатывать дамп аргументов JSON.
Обновление вот что я разработал: