如何能有效地在一个错误的情况下,自动记录最后一个函数(在SRC代码)的参数被抛出?

问题描述 投票:2回答:1

我非常茫然,当我看着直播服务器错误,并查看堆栈跟踪。

例如。火力地堡云功能堆栈跟踪可以点我到一个函数名和在错误发生了文件。

在Object.exports.functionName(/user_code/lib/routes/file.js:98:11)

虽然有时这些错误可能很难重现本地不知道什么与请求传递大对象出了错。

const requestData = {
    largeData: {
         thatIsNestedManyLevels: undefined // <-- this undefined value causing server error and is hard to guess/reproduce locally 
    }
    // etc..
}

所以我的主要焦点现在是创建一个解决方案,可以让我快照所有最接近的顶部函数的参数,它包括在错误事件。

我也知道,火力的功能的控制台将停留在一定的水平,给予“[对象对象]”。

所以,我可能甚至献身于拯救这些错误,并创建一个浏览应用程序,让我只需打开一个新的项目/播放支持Chrome控制台的对象。 (因为你可以不断展开的对象那里)。

我觉得,虽然这是一个很常见的问题和解决方案已经存在了,并希望有人能指点他们。

问:我怎样才能有效地记录的最后一个函数(在SRC代码)的参数自动在错误的情况下被抛出?

javascript typescript error-handling google-cloud-functions tracing
1个回答
1
投票

在一个节点的应用程序,你可以定义一个__stack对象,这将有助于你得到完整的堆栈跟踪的记录,像这样:

global.logger = require(path.join(__dirname, 'app_modules/logger'));
Object.defineProperty(global, '__stack', {
    get: function () {
        let orig = Error.prepareStackTrace;
        Error.prepareStackTrace = function (_, stack) {
            return stack;
        };
        let err = new Error;
        Error.captureStackTrace(err, arguments.callee);
        let stack = err.stack;
        Error.prepareStackTrace = orig;
        return stack;
    }
});

然后记录仪模块中,你可以这样调用:

let logString = JSON.stringify({
                "Level": "Error",
                "LogErr": logEntry,
                "Stacktrace": __stack,
                "at": __stack[1].getFileName() + ":" + __stack[1].getLineNumber() + ":" + __stack[1].getColumnNumber()
            }, null, 4);
            process.stderr.write(
                logString.replace(/\\n/g, "\n")
            );
© www.soinside.com 2019 - 2024. All rights reserved.