мы используем morgan
для регистрации нашего экспресс-преобразования:
var morgan = require('morgan');
morgan('combined');
// a format string
morgan(':remote-addr :method :url :uuid');
// a custom function
morgan(function (req, res) {
return req.method + ' ' + req.url + ' ' + req.uuid;
})
Кроме того, мы используем winston
для регистрации других наших журналов:
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level: 'info' }),
new (winston.transports.File)({ filename: '/var/log/log-file.log' })
]
});
Есть ли способ объединить два регистратора вместе? теперь ситуация такова, что morgan
запись на мой стандартный вывод, когда winston
запись в /var/log/log-file.log
.
Я хочу, чтобы файл регистратора объединял информацию об экспресс-преобразовании и другую информацию, которую я хочу ( logger.info()
).
Ответы:
Эта статья отлично справляется с тем, чем вы хотите заниматься.
http://tostring.it/2014/06/23/advanced-logging-with-nodejs/
Для вашего конкретного кода вам, вероятно, понадобится что-то вроде этого:
Это настроит Winston на запись журнала в консоль, а также в файл. Затем вы можете использовать последнее выражение для передачи выходных данных промежуточного программного обеспечения morgan в winston.
источник
app.use(morgan("combined", { stream: { write: message => logger.info(message) }}));
logger.info(message.trim())
winston: ^3.0.0
использованияwinston.createLogger
вместоnew winston.Logger
В машинописном тексте:
источник
Обновите последнюю строку, чтобы удалить предупреждение
источник
для Typescript другой способ сделать это без необходимости создания класса -
Это решение было взято с этой страницы Github https://github.com/winstonjs/winston/issues/1385 . Однако важно отметить, что между нашими кодами есть небольшая разница. Вместо того:
Я использую:
Это помогло мне, так как я не слишком разбираюсь в создании классов.
источник
У Моргана есть дурная привычка заканчивать сообщение символом,
\n
поэтому, чтобы все было упорядочено, вы можете удалить его, прежде чем писать его Уинстону.Это можно сделать разными способами, например, на стороне формата в Winston или обновив поток, чтобы не писать
\n
источник