#javascript #node.js #express #ecmascript-6 #winston
#javascript #node.js #выразить #ecmascript-6 #уинстон
Вопрос:
import express from 'express';
import route from './server/routes/route';
import cookieParser from 'cookie-parser';
import bodyParser from 'body-parser';
import favicon from 'serve-favicon';
import path from 'path';
import Logger from './server/logger/logger.js';
try {
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());
app.use(favicon(path.join(__dirname, '/client/assets/favicon.ico')));
app.use(express.static(path.join(__dirname, 'client')));
app.use(route);
app.listen(3000);
new Logger().logInfo('Server started at port 3000');
} catch (e) {
new Logger().logError(e);
process.exit(1);
}
process.on('uncaughtException', function (err) {
process.exit(1);
new Logger().logError(err);
});
Здесь я пытаюсь создать экспресс-сервер. Я использовал блок try catch. Когда я удаляю import path from 'path'
, генерируется ошибка и вызывается catch. Однако проблема new Logger().logError(e);
не работает. предполагается, что ошибка регистрируется в определенном файле. Но ничего не происходит. Но если ошибки нет, значит logInfo()
, все работает нормально. Я попытался войти в консоль, и это работает. Я использую babel, так что это проблема с этим?
Logger — это класс, который содержит реализацию winston logger и предоставляет методы LogError и logInfo.
Комментарии:
1. «Однако проблема
new Logger().logError(e);
не работает». Можете ли вы подробнее рассказать об этом?2. отредактированный вопрос
3. Возможно,
.logError()
это не совсем синхронно иprocess.exit(1)
прерывает его до того, как это будет сделано4. я удалил
process.exit(1)
, а затем журнал сработал. Я попытался ввестиprocess.exit(1)
обратный вызов для logInfo(), но идентификатор не сработал.
Ответ №1:
Это известная ошибка в winston, и, похоже, они не собираются ее исправлять. Я использовал один из предложенных там обходных путей, и все работает нормально. Здесь
this.winstonlogger.log('error', logMessage, () => {
this.transports.file.on('flush', () => {
process.exit(1);
});
});