При расширении объекта 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
объект?