Javascript 扩展错误对象时是否需要super(originalError)?

Javascript 扩展错误对象时是否需要super(originalError)?,javascript,node.js,logging,ecmascript-6,error-handling,Javascript,Node.js,Logging,Ecmascript 6,Error Handling,扩展Error对象时,调用super(originalError)会导致打印到STDOUT的正常堆栈跟踪,这让我很沮丧。我希望我的日志被格式化为JSON格式,以便logstash/Kibana可以使用它们。Kibana中包含\n的堆栈跟踪被拆分为多个条目,因为它实际上不知道如何处理该输入。我可以通过在登录之前进行一些修改来避免这种情况 function logError(errorDetails, stack) { logger.error({ errorDetails, stack: sa

扩展
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)


是的。

super()
不会将任何内容打印到控制台?!它只是创建了
错误
实例。或者您的环境中是否有覆盖的
错误
构造函数?@Bergi
但是调用super(原始错误)用新行字符打印到控制台
似乎是我误导了什么地方。你能指出是什么让你认为它没有打印任何东西吗?@Bergi-Hmm我不完全明白。
Super(原始错误)在我的情况下,
不会打印到控制台。@Bergi I只
扩展
错误
,而不是覆盖它。您能显示一个完整的程序来重现问题吗?创建
新错误(…)
不会在我的节点中打印任何内容到控制台-除非您执行
控制台.log(新错误(…)
。这确实回答了问题,谢谢。您知道是否有任何方法可以禁止打印错误堆栈吗?调用
error
构造函数不应在任何地方打印任何内容。请在您的问题中创建一个