应用程序引擎标准和自动错误记录问题(以及有关错误报告)

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

我正在使用 App Engine 标准和 Nodejs 做我的第一个 App Engine 项目。我喜欢这种体验,但我现在在错误记录方面遇到问题。

App 引擎似乎会自动记录每个应用程序错误,严重程度为“错误”。它使用一个“ERROR”日志条目来记录错误,并为每一行使用许多“INFO”条目来记录结构化日志 JSON 的每一行:

在此屏幕截图中,您可以看到 App Engine 自动创建的第一个日志,严重性为“错误”。然后许多“INFO”日志显示同一错误的 json 有效负载。黄色警告日志是我使用 App Engine 中的 @google-cloud/logging Nodejs 包创建的日志,该日志具有“警告”严重性的相同错误。

有没有办法阻止 App Engine 标准自动记录应用程序中的中间件捕获的应用程序错误?或者有没有一种方法可以在不使用许多“INFO”日志的情况下以更好的方式记录错误,以便日志以良好的 json 格式构建?

我还意识到,我使用 App Engine 标准中的 @google-cloud/logging Nodejs 包记录的错误不会添加到错误报告中。仅由 App Engine 自动记录的错误。有没有办法将这些日志添加到错误报告中?

谢谢!

这里有一些代码片段,如果它可以帮助您回答或讨论这个主题:

throw new AppCustomError({isPublic:"public",logSeverity:"WARNING",statusCode:403,errorCode:10010,dataToLog:req.dataToLog,
            message:"GETtextsData - User is not logged in."});

class AppCustomError extends Error{ //appCustomError is a custom Error class

constructor(errorObject){
    super();
    this.message=errorObject.message;
    this.errorCode=errorObject.errorCode; 
    this.statusCode=errorObject.statusCode;
    this.status=errorObject.statusCode >= 400 && errorObject.statusCode < 500 ? "fail" : "error";
    this.logSeverity=errorObject.logSeverity;
    this.dataToLog=errorObject.dataToLog;

    if(errorObject.isPublic==="public"){
        this.isPublic=true;
    }else{
        this.isPublic=false;
    }

    Error.captureStackTrace(this,this.connector);
}}export default AppCustomError;

使用 logSync() 方法创建日志的位置:

if(process.env.GAE_APPLICATION){
env="gae";
logPayload.LOGGERenv=env;
log=logging.logSync(logName); //Using logsync will use a logging agent and stdout the log. Parameters will be set automatically. This is best for serverless applications like GAE. https://cloud.google.com/nodejs/docs/reference/logging/latest#writing-to-stdout
metadata.GAE_deployment_id=process.env.GAE_DEPLOYMENT_ID,
metadata.GAE_instance_id=process.env.GAE_INSTANCE,
metadata.GAE_runtime=process.env.GAE_RUNTIME}
google-cloud-platform google-app-engine google-cloud-logging
1个回答
0
投票

App Engine 自动记录错误: 您无法阻止这种情况,但您可以控制自定义错误日志记录。

您可以尝试以下步骤:

  • 使用

    @google-cloud/logging
    进行结构化日志:创建清晰的消息、严重性级别和相关数据。

  • 可选的错误报告集成:使用

    @google-cloud/error-reporting
    明确报告错误以进行集中管理。

//JavaScript Example:

const { Reporting } = require('@google-cloud/error-reporting');

const errorsClient = new Reporting({
  projectId: 'your-project-id',
  // Other client options
});

// ... (Your application logic)

try {
  // Your code
} catch (error) {
  errorsClient.reportError(error);
  throw error; // Re-throw to trigger App Engine's automatic logging
}
  • 记录后抛出错误:重新抛出错误以触发App Engine的自动记录以进行全面覆盖。

参考文档:

© www.soinside.com 2019 - 2024. All rights reserved.