Google App Engine 错误未显示在使用 Flask 的 StackDriver 错误报告中

Google App Engine Errors not showing up in StackDriver Error Reporting using Flask

我正在使用 Google App Engine 标准环境来托管 python-flask-application,但我在 StackDriver 错误报告中显示错误时遇到了问题。默认情况下 Google App Engine 应该将错误记录到 StackDriver 错误报告,但它不会。

我之前在 StackDriver 错误报告中出现过错误,但我无法重现。错误似乎直接进入服务器错误部分,而不是应用程序错误。但对我来说,两者都记录在 StackDriver 错误报告中似乎合乎逻辑。

我进行了一些调试,以便使用路由 /error/500 使其正常工作。结果如下:

有人知道为什么会这样吗?

更新: 我发现使用 flask.logger 似乎是问题所在。使用 logging 工作正常并最终出现在 StackDriver 错误报告中(某些格式问题除外)。不过,两者最终都会出现在记录器中。我正在使用 logging.StreamHandler 使用 addHandler 注册到 flask.logger。我最好的猜测是 logging.StreamHandler 的格式有问题。进一步调查。

在使用 Google App Engine SDK 进行一些挖掘和调试之后,我发现有一个用于 GAE 的日志处理程序:

google.appengine.api.app_logging.AppLogsHandler

Google App Engine 将一个注册到 logging,但不会注册到 flask.logger。因此,如果您使用 app.logger.error(my_error),它不会注册到 StackDriver 错误报告。

现在我手动注册一个解决了这个问题:

from google.appengine.api.app_logging import AppLogsHandler
app.logger.addHandler(AppLogsHandler())

app.logger.error(my_error)