GoogleCloudPlatform / GoogleCloudPlatform/functions-framework-python

Improve developer experience for uncaught exceptions on GCP

Abierto
#296 1 comentario 1 reacción 1 asignado Reclamado por @janell-chen Ver en GitHub
enhancement P2
Lenguaje dominante
Python
Estrellas
968
Forks
128
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

When a function executes and exits with an uncaught exceptions, the exception is logged as a regular plaintext Python traceback to stderr. The content is then captured into Cloud Logging as plaintext too, which makes it difficult to parse and analyze.

Consider the following dummy function:

```python
import functions_framework

@functions_framework.http
def test_crash(request):
raise ValueError("something doesn't work")
```

When calling this function, it (of course) crashes, and renders as follow:

![image](https://github.com/GoogleCloudPlatform/functions-framework-python/assets/65311/d995b32d-2773-437d-be74-2e2eff071a78)

This has several disadvantages:

* The error is spread over multiple line: it's not possible to point to a single log entry which contains the traceback, you always need to see here ~20 lines to get the full picture.
* The traceback only makes sense if Cloud Logging is sorted _from oldest to newest_ (I typically shows newest entries first, and the traceback is reversed :facepalm: )
* The error doesn't really show up in Error Reporting: only some of the exception, part of Flask, is caught into Error Reporting and it's really not useful:
![image](https://github.com/GoogleCloudPlatform/functions-framework-python/assets/65311/bfcf4070-e279-49c9-b26a-e204134cdd70)

Ideally, out of the box when running on GCP:

* The framework should log the error into a single `CRITICAL` log entry
* The error should be formatted to be reported automatically with the right content into Error Reporting

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.