Ответ 1
Мне было интересно то же самое и найти подходящее решение (хотя и не идеальное IMO, поэтому, возможно, кто-то еще может взвесить это).
Вы можете полностью настроить вывод журнала, предоставив вашему транспортному объекту функцию форматирования. Это может быть лучше для Транспортировки файлов, чем Консоль, так как вам придется вручную раскрасить шрифт, если это вам нужно.
Вот относительно простая функция форматирования, которую вы можете использовать (и настроить для своих нужд):
// Define options for Date#toLocaleTimeString call we will use.
var twoDigit = '2-digit';
var options = {
day: twoDigit,
month: twoDigit,
year: twoDigit,
hour: twoDigit,
minute: twoDigit,
second: twoDigit
};
function formatter(args) {
var dateTimeComponents = new Date().toLocaleTimeString('en-us', options).split(',');
var logMessage = dateTimeComponents[0] + dateTimeComponents[1] + ' - ' + args.level + ': ' + args.message;
return logMessage;
}
И чтобы использовать этот форматтер в вашем транспорте, просто настройте свой код, чтобы передать функцию в:
winston.loggers.add('category1', {
file: {
filename: '/path/to/some/file',
json: false,
formatter: formatter
}
});
Стоит отметить, что свойство args.meta
будет установлено на любой объектный аргумент, который передается в вызов метода журнала. Таким образом, вам придется придумать стратегию обработки переданных объектов (или просто распечатать весь объект как JSON). Например:
var error = {
name: 'MongoError',
code: 11000,
err: 'insertDocument :: caused by :: 11000 E11000 duplicate key error...'
}
logger.info('Some error ocurred: ', error);
В результате будет args.meta
установлено значение переменной.
Как вы можете видеть, существует достаточная сумма для обработки сообщений журналов таким образом. Я не удивлюсь, если бы был лучший способ сделать это, но, надеюсь, это поможет вам (или кому-то еще) выйти.