报告错误

本教程介绍如何使用 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. 在 Google Cloud 控制台中,转到 App Engine 的版本页面。

    转到“版本”

  2. 选中要删除的非默认应用版本对应的复选框。
  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. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。