Я создаю структуру ведения журнала с помощью Winston. В основном используется встроенный http-транспорт Winston. Мой вопрос в том, как мне отловить любые HTTP-исключения, которые могли возникнуть при отправке HTTP-запроса из-за недопустимого host / path / auth. Ниже представлена моя структура кода.
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const transportOptions = {
host: 'host',
port: 'port',
path: '/',
auth: '',
};
const myFormat = printf(debug => {
var msg = {
timestamp: debug.timestamp,
label: debug.label,
level: debug.level,
message: debug.message,
};
return JSON.stringify(msg);
});
const logger = createLogger({
level: 'debug',
format: combine(label({ label: 'label' }), timestamp(), myFormat),
transports: [
new transports.Console(),
new transports.Http(transportOptions),
],
json: false,
});
logger.info('Test');
Если я укажу неправильное значение в transportOptions, он ничего не сделает. Я хочу, чтобы в моей структуре было какое-то исключение, чтобы я знал, когда возникает какая-либо ошибка / исключение. Может ли кто-нибудь дать мне какое-нибудь предложение?





Согласно https://github.com/winstonjs/winston/blob/master/lib/winston/transports/http.js#L57, похоже, что транспорт HTTP генерирует событие 'warn', если код ответа HTTP не равен 200. Итак, пока ваш сервер возвращает не-200 при возникновении ошибки, вы можете прослушивать событие 'warn' из вашего транспорта. и обработать ошибку соответствующим образом (выбросить исключение или что угодно). Вот пример кода (я тестировал, и он работает):
// Declare your transport outside the logger definition
const t = new transports.Http(transportOptions);
...
t.on('warn', (e) => console.info('warning! ' + e));
logger.info('Test'); // 'warning! ...'
Обратите внимание: если сервер не отвечает, транспорт не сообщает о предупреждении; это ошибка или особенность, я не уверен ... :)