Нужно ли super (originalError) при расширении объекта Error? - PullRequest
0 голосов
/ 12 сентября 2018

При расширении объекта Error я разочарован тем, что вызов super(originalError) приводит к нормальной трассировке стека, напечатанной в STDOUT.Я хочу, чтобы мои журналы были отформатированы в JSON, чтобы они могли использоваться logstash / Kibana.Следы стека в Кибане, включающие \n, разбиты на несколько записей, так как он не знает, что делать с этим вводом.Я могу избежать этого с помощью небольшой модификации перед регистрацией

function logError(errorDetails, stack) {
  logger.error({ errorDetails, stack: sanitizeLineBreaks(stack) } // removes `\n`
}

Однако реализуемый мной объект ошибки, который выглядит следующим образом:

class ServerError extends Error {
  constructor(originalError, errorDetails, stack) {
    super(originalError) // <- this is the problem
    Error.captureStackTrace(this, ServerError)
    // stuff ...
    logError(originalError, stack)
  }
}

Тем не менее, вызов super(originalError) печатает вконсоль с символами новой строки;это делает для некрасивых записей, где каждая строка трассировки является отдельной записью в графическом интерфейсе Kibana.Я не получаю никаких жалоб в консоли, когда я не вызываю super(originalError), но я все еще не решаюсь удалить его.

Нужен ли super(originalError) при расширении Error объект?

1 Ответ

0 голосов
/ 12 сентября 2018

(Игнорирование вашей проблемы с ведением журнала)

Требуется ли super(originalError) при расширении объекта Error?

Да. Каждое class, которое extends другое и определяет пользовательский constructor , должен вызвать super(), чтобы создать экземпляр .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...