Как отловить ошибки на Winston Http Transport

Я создаю структуру ведения журнала с помощью 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, он ничего не сделает. Я хочу, чтобы в моей структуре было какое-то исключение, чтобы я знал, когда возникает какая-либо ошибка / исключение. Может ли кто-нибудь дать мне какое-нибудь предложение?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 401
1

Ответы 1

Согласно 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! ...'

Обратите внимание: если сервер не отвечает, транспорт не сообщает о предупреждении; это ошибка или особенность, я не уверен ... :)

Другие вопросы по теме