记录包含我们的密钥的大量错误的最佳方法是什么
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;
通常我只是简单地记录错误,或者我会做 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;