gpt4 book ai didi

javascript - 扩展 Error 对象时是否需要 super(originalError)?

转载 作者:行者123 更新时间:2023-11-29 23:17:19 28 4
gpt4 key购买 nike

当扩展 Error 对象时,我很沮丧调用 super(originalError) 导致打印到 STDOUT 的正常堆栈跟踪。我希望我的日志采用 JSON 格式,以便 logstash/Kibana 可以使用它们。 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 GUI 中的一个单独条目。当我调用 super(originalError) 时,我在控制台中没有收到任何投诉,但我仍然犹豫要不要删除它。

super(originalError) 在扩展 Error 对象时是否有必要?

最佳答案

(忽略您的日志记录问题)

Is super(originalError) necessary when extending the Error object?

是的。 Every class that extends another and defines a custom constructor must call super() to create the instance .

关于javascript - 扩展 Error 对象时是否需要 super(originalError)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52302664/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com