记录包含我们的密钥的大量错误的最佳方法是什么

What's the best way to log massive errors which contain our keys

通常我只是简单地记录错误,或者我会做 console.log(err.message),但我们的一位服务人员 returns 会转储信息数据。由于 Javascript 截断对象,错误的相关部分被掩盖了。

所以完整的错误是这样的

request:{ // thousands of lines
// ...
// several levels deep there will be a pertinent portion buried deep within the error
    error:{
        en: {
            message:{
              "Here is the super specific error info which I care about"

这个日志会这样结束

request:{ // thousands of lines
    Object // <- it's in there

理想情况下,我只是简单地记录我关心的重要部分,但为了甚至到达对象的这一部分,我必须检查错误 console.log(util.inspect(err, false, null)),它提供了 5000 的数据转储+ 在许多地方包含我们的密钥的行。

有一次我正在这样做

var errorMsgIs = "";
if (err.response && err.response.body && err.response.body.error && err.response.body.error.en) {
   errorMsgIs = err.response.body.error.en
}

console.log(loggit, "Bank Error on Nodes.create inside addARInfo: ", err, errorMsgIs);

但这只有在结构永远不会根据错误发生变化的情况下才有效。

解决方案是想出某种清理功能来梳理所有 5000 行,逐级检查并专门检查键,然后做一个 .replace,我考虑过这样做路线.

记录这些大量错误的最佳方法是什么,这样我就可以在错误中获取我需要的相关数据,同时又不会将我们的密钥暴露在日志中?

是的,您需要遍历对象属性并查找您的数据结构。有了递归函数,就很简单了:

/**
 * Retrieve an error message from an error object.
 * @param {object} obj 
 * @returns {string | undefined}
 */
function getErrorMessage(obj) {
  const props = Object.values(obj);
  for (let i = 0; i < props.length; i++) {
    const element = props[i];
    if (typeof element === 'object') {
      if (element.error?.en?.message) return element.error.en.message;
      const result = getErrorMessage(element);
      if (result) return result;
    }
  }
}

const data = {/* ... */}; // your data object
console.log(getErrorMessage(data));

请注意,这是使用 ES2020+ 语法(用于可选链接)。如果您无权访问该 ES 级别,则可以使用您的初始语法:

if (element.error && element.error.en && element.error.en.message) return element.error.en.message;