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
构造函数不应在任何地方打印任何内容。请在您的问题中创建一个