Я новичок в Уинстоне, и я пытаюсь использовать его для регистрации неперехваченных исключений и затем выхода.Он регистрируется в консоли, но, похоже, не успевает войти в файл перед выходом
Вот пример:
index.js
const express = require('express');
const app = express();
const logger = require('./startup/logging');
process.on('uncaughtException', (ex) => {
logger.error("Won't be logged in the File");
process.exit(1);
});
throw new Error("Uncaught");
logging.js
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
format: format.combine(
format.timestamp({
format: 'YYYY-MM-DD hh:mm:ss |'
}),
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
),
transports: [
new transports.Console({
format: format.combine(
format.colorize({
// all: true
}),
// this is repeated because for some reason colorize() won't work otherwise
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
)
}),
new transports.File({ filename: './exceptions.log' })
]
});
module.exports = logger;
Как уже упоминалось, необработанное исключение регистрируется в консоли, но не в файле.Удаление process.exit(1)
решает проблему ведения журнала, но я хочу, чтобы программа завершила работу.
Добавление handleExceptions: true
к транспорту файлов вызывает ту же проблему - оно завершается до регистрации исключения.Я предполагаю, что это причина, так как добавление exitOnError: false
затем регистрирует исключение.
Это предполагаемое поведение?Это кажется мне странным даже для начинающего.
РЕДАКТИРОВАТЬ:
process.on('uncaughtException', (ex) => {
logger.log('error', 'Will be logged');
setTimeout(function(){process.exit(1)}, 1000);
});
Это работает, но, конечно, это не исправление, просто показывает проблему, у меня есть