logging library doesn't support Exceptions
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 52/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- python
- Domaine
- observability-sre
Piste de recherche
Commencez dans firebase_functions/logger.py, en particulier avec error(), write() et _entry_from_args(), puis comparez l’exemple documenté de logging Firebase avec l’échec de sérialisation JSON présenté ici. La tâche est terminée lorsque le logging d’une Exception ne provoque plus d’erreur et que l’API de logging inclut la stack trace complète de l’Exception dans les logs de la fonction.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
The logger in firebase_functions doesn't seem to provide reasonable support for exceptions.
In the example, firebase suggests extracting a portion of the error and including it:
try
...
except:
e = sys.exc_info()[0]
# Attach an error object as the second argument
logger.error("Unable to read quote from Firestore, sending default instead", error=e)
However this fails with an error:
../../../../Library/Caches/pypoetry/virtualenvs/oasis-zYbk3Ww0-py3.11/lib/python3.11/site-packages/firebase_functions/logger.py:130: in error
write(_entry_from_args(LogSeverity.ERROR, *args, **kwargs))
../../../../Library/Caches/pypoetry/virtualenvs/oasis-zYbk3Ww0-py3.11/lib/python3.11/site-packages/firebase_functions/logger.py:95: in write
print(_json.dumps(_remove_circular(entry)), file=write_file)
../../../../.pyenv/versions/3.11.7/lib/python3.11/json/__init__.py:231: in dumps
return _default_encoder.encode(obj)
../../../../.pyenv/versions/3.11.7/lib/python3.11/json/encoder.py:200: in encode
chunks = self.iterencode(o, _one_shot=True)
../../../../.pyenv/versions/3.11.7/lib/python3.11/json/encoder.py:258: in iterencode
return _iterencode(o, 0)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <json.encoder.JSONEncoder object at 0x10166ee10>, o = <class 'TypeError'>
def default(self, o):
"""Implement this method in a subclass such that it returns
a serializable object for ``o``, or calls the base implementation
(to raise a ``TypeError``).
For example, to support arbitrary iterators, you could
implement default like this::
def default(self, o):
try:
iterable = iter(o)
except TypeError:
pass
else:
return list(iterable)
# Let the base class default method raise the TypeError
return JSONEncoder.default(self, o)
"""
> raise TypeError(f'Object of type {o.__class__.__name__} '
f'is not JSON serializable')
E TypeError: Object of type type is not JSON serializable
../../../../.pyenv/versions/3.11.7/lib/python3.11/json/encoder.py:180: TypeError
Moreover it's not really an ideal API to log a subset of an exception. Ideally the entire stack trace would be included.
If you instead simply print the error, you can see a reasonable stack trace in the logs for the function.
I'd expect the example to not throw. I'd also expect the logging API to explicitly support logging Exceptions with stack traces
- Langage dominant
- Python
- Étoiles
- 167
- Forks
- 36
- Merge moyen
- 4 j 3 h
- PR mergées (30 j)
- 1
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de firebase/firebase-functions-python
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
-
HttpsError.__init__ does not pass message to super().__init__()Peut-être pris @Aayush99910 l’a pris il y a 2 jours. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
firebase/firebase-functions-python#314 · 1 commentaire ·
-
Add support for VPC direct connectPeut-être pris @IzaakGough l’a pris il y a 107 jours. Ouvertefeature-request
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
firebase/firebase-functions-python#275 · 1 commentaire · 1 réaction ·
-
feature-request
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
firebase/firebase-functions-python#271 · 3 commentaires ·
-
[Bug] stability_digest_payload_from_ce_payload fails with AttributeError: 'dict' object has no attribute 'split'Peut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouvertebug unable to reproduce
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
firebase/firebase-functions-python#260 · 6 commentaires ·
Toutes les issues de firebase/firebase-functions-python
Issues similaires
-
docs(types): update the collection binding note now that typed collections shipped in pycubrid 1.9.0Ouvertedocumentation priority: low size: S
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
cubrid-lab/sqlalchemy-cubrid#768 ·
Les mainteneurs répondent en général sous 1 jour
-
--csv-bom was never wired up: PR #850 added an unused helper parameter, so #846 is not fixedOuvertebug help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
Broken link in index.rstOuvertedocumentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 65/100
ansys/pydpf-core#3547 ·
Les mainteneurs répondent en général sous 1 jour
-
core
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
vectorize-io/hindsight#5457 ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: LangChain drops OpenAI Responses text blocks from session recordingPeut-être pris @ktz03 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
volcengine/OpenViking#5806 ·
Les mainteneurs répondent en général sous 1 jour