Javascript删除堆栈跟踪字符串中的最后一项

Javascript删除堆栈跟踪字符串中的最后一项,javascript,string,stack-trace,Javascript,String,Stack Trace,我正在创建一个Javascript记录器,在其中,对于错误消息,我还添加了如下堆栈跟踪: function logMessage(logMessage) { let stackTrace = new Error().stack; logMessage.stackTrace = stackTrace; ... } 这给了我堆栈跟踪,但它显然也添加了logMessage方法本身作为堆栈上的最后一项 如何删除最后一个跟踪,以便在调用logMessage之前只查看跟踪,而不查看logMe

我正在创建一个Javascript记录器,在其中,对于错误消息,我还添加了如下堆栈跟踪:

function logMessage(logMessage) 
{
  let stackTrace = new Error().stack;
  logMessage.stackTrace = stackTrace;
  ...
}
这给了我堆栈跟踪,但它显然也添加了
logMessage
方法本身作为堆栈上的最后一项


如何删除最后一个跟踪,以便在调用
logMessage
之前只查看跟踪,而不查看
logMessage
本身?

方法非常简单,因为我们得到的堆栈是一个字符串除以
\n
,格式如下:

ERROR \n
at ... \n
at ... \n
因此,我们需要做的就是:

let stackTrace = new Error().stack;   //get the stack trace string
let arr = stackTrace.split("\n");     //create an array with all lines
arr.splice(1,1);                      //remove the second line (first line after "ERROR")
stackTrace = arr.join("\n");          //join array back to a string

堆栈跟踪返回以错误消息开头的多行字符串,然后返回以{function name/position}处的
开头的所有行

您可以简单地更改多行字符串,并使用
拆分
筛选
联接
绕过第一次出现在{function name/position}

stackTrace.split('\n').filter(函数(行,索引){returnindex!==1})。join('\n');
参见代码片段示例

函数deepFunctionStack(){
返回新的错误();
}
函数层1函数(){
返回deepFunctionStack();
}
函数topLayerFunction(){
返回layer1函数();
}
var originalStack=topLayerFunction();
var formattedStack=originalStack.split('\n')。filter(函数(行,索引){return index!==1})。join('\n');
document.write('原始堆栈:');
文件。书写(“”+原始标记+“”);
document.write('格式化堆栈:');

文件。写入(“”+formattedStack+“”)
错误。堆栈
是一个字符串,包含每个函数的行列表,所有行都以“at
开头,您可能可以使用
正则表达式”通过删除第一个出现的行来转换堆栈。