报告错误

本教程介绍如何使用 Google Cloud ConsolePython 书架应用中报告和跟踪未捕获的异常。

Error Reporting 提供了一个集中式的信息中心,显示每个唯一错误的计数,堆栈轨迹和发生的历史记录。您还可以设置出现错误时的提醒。

本教程由多个页面组成,本页面是其中之一。要从头开始阅读并查看设置说明,请参阅 Python Bookshelf 应用

配置设置

本部分使用 5-logging 目录中的代码。修改文件并在此目录中运行命令。

  1. 打开要修改的 config.py 文件并替换以下值:
    • [PROJECT_ID] 的值设置为您的项目 ID,您可以在 Cloud Console 中查看项目 ID。
    • [DATA_BACKEND] 的值设置为您在使用结构化数据教程中使用的值。
    • 如果您使用的是 Cloud SQL 或 MongoDB,请将 Cloud SQLMongo 部分下的值设置为您在使用结构化数据步骤中使用的值。
    • [CLOUD_STORAGE_BUCKET] 的值设置为您的 Cloud Storage 存储分区的名称。
    • OAuth2 configuration 部分下,将 [GOOGLE_OAUTH2_CLIENT_ID][GOOGLE_OAUTH2_CLIENT_SECRET] 的值设置为您之前创建的应用客户端 ID 和密钥。

  2. 保存并关闭 config.py 文件。

如果您使用的是 Cloud SQL:

  1. 打开要修改的 app.yaml 文件。
  2. cloudsql-instance 的值设置为与 config.py 文件中的 [CLOUDSQL_CONNECTION_NAME] 所使用的值。请使用格式 project:region:cloudsql-instance。取消对这一整行的注释。
  3. 保存并关闭 app.yaml 文件。

安装依赖项

要创建虚拟环境并安装依赖项,请使用以下命令:

Linux/macOS

virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt

Windows

virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt

在本地机器上运行应用

  1. 启动本地网络服务器:

    python main.py
    
  2. 在浏览器中,输入以下地址:

    http://localhost:8080
    

Control + C 退出工作器,然后退出本地 Web 服务器。

将应用部署到 App Engine 柔性环境

  1. 部署示例应用:

    gcloud app deploy
    
  2. 在浏览器中,输入以下网址:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    替换以下内容:

如果您要更新应用,则只需输入您在部署应用时使用的命令,即可部署更新后的版本。该部署会创建应用的新版本并将其提升为默认版本。应用的旧版本仍会保留,与其关联的虚拟机 (VM) 实例也是一样。所有这些应用版本和虚拟机实例都属于可计费资源。要减少费用,请删除应用的非默认版本。

要删除应用版本,请执行以下操作:

  1. In the Google Cloud console, go to the Versions page for App Engine.

    Go to Versions

  2. Select the checkbox for the non-default app version that you want to delete.
  3. 如需删除应用版本,请点击删除

如需详细了解如何清理可计费资源,请参阅本教程最后一步中的清理部分。

模拟错误

如需查看 Error Reporting 的实际应用,请刻意在代码中引入错误,然后在 Cloud Console 的 Error Reporting 页面中查找异常。

  1. bookshelf/crud.py 中,添加一个访问未定义变量的操作,并在索引视图中生成一个 ReferenceError

    @crud.route("/")
    def list():
       x[3]
    
  2. 部署应用。

    gcloud app deploy
  3. 访问索引页面。

    gcloud app browse

    您可以查看 An internal error occurred 消息。

  4. 在 Cloud Console 中,转到 Stackdriver Error Reporting 页面。

    转到 Python

    您会看到列出的错误。

    查看错误

  5. 点击相应错误以查看有关错误的信息,例如错误上次出现时间、错误发生次数、发生次数直方图以及堆栈轨迹。

了解代码

为了报告未捕获的异常,该代码首先使用 Flask errorhandler修饰器,然后使用 Python 版 Cloud 客户端库向 Error Reporting 报告异常。

@app.errorhandler(500)
def server_error(e):
    client = error_reporting.Client(app.config['PROJECT_ID'])
    client.report_exception(
        http_context=error_reporting.build_flask_context(request))
    return """
    An internal error occurred.
    """, 500

客户端自动添加回溯信息,并使用辅助函数从 Flask 请求中提取相关的请求的详细信息,以便在 Error Reporting 中填充应用中任何未捕获的 InternalServerError HTTP 500 异常的相关堆栈跟踪和 HTTP 上下文。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

若要避免产生费用,最简单的方法是删除您为本教程创建的项目。

要删除项目,请执行以下操作:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.