Node.js не выводится на консоль morgan - PullRequest
0 голосов
/ 06 сентября 2018

Я работаю с новым проектом с помощью бэкэнда node.js, и мой morgan регистратор работает достаточно проводно. Сначала я не мог получить какой-либо вывод из него, используя какой-либо из предопределенных шаблонов Моргана (tiny, short, e.c.t), ничего не было передано на вывод. Я предоставил пользовательскую функцию регистрации, чтобы проверить, вызывается ли вообще морган в моем стеке:

app.use(morgan((tokens, req, res) => {
console.log('AAAAAAAAAAA');
return 'ABABABABABAA';
}, { stream: process.stdout }));

Последовательность AAAAAAAAAAA действительно передается на консольный вывод через colsole.log внутри функции ведения журнала (доказательство того, что morga фактически вызывается при каждом запросе), но функция ведения журнала вообще не обеспечивает свою последовательность ABABABABABA.

Пока я могу себе представить, что предопределенный формат может потерпеть неудачу из-за нетрадиционных имен req / res объектов (что, кстати, не так), а затем возвращать простой текст из функции регистратора должно быть явно распространено на вывод напрямую.

Редактировать

Установка опции morgan в {immediate: true} также не решает проблему.

1 Ответ

0 голосов
/ 18 марта 2019

В моем случае проблема заключалась в том, что я не назвал «Морган» сразу после создания приложения. Когда я изменил свою позицию, это решило проблему. Я не смог найти никакой ссылки на странице «Морган» об этом, но нашел ее в другом ответе здесь: Экспресс Морган не записывает журналы в файл или STDOUT

Рабочий раствор:

let app = express()
app.use(morgan('combined'))     <--- morgan right after app
app.set('views', './views')
app.set('view engine', 'ejs')
app.use('/', routes)

Не рабочий код (ранее):

let app = express()
app.set('views', './views')
app.set('view engine', 'ejs')
app.use('/', routes)
app.use(morgan('combined'))     <--- morgan
...