Project

General

Profile

Development #31774

ajouter au log d'un appel à un endpoint la réponse produite

Added by Frédéric Péters 9 months ago. Updated 21 days ago.

Status:
Solution proposée
Priority:
Normal
Assignee:
Target version:
-
Start date:
27 Mar 2019
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

Besoin noté dans #31740, il me semble qu'on pourrait modifier les méthodes de ProxyLogger pour retourner l'objet ResourceLog créé, l'attacher à la requête, et en fin de parcours ajouter dans son .extra le contenu de la réponse.

0001-logging-append-connector-response-to-ressource-log-3.patch View (7.01 KB) Nicolas Roche, 13 Nov 2019 06:34 PM

0001-logging-append-connector-response-to-ressource-log-3.patch View (7.51 KB) Nicolas Roche, 15 Nov 2019 11:26 AM

History

#1 Updated by Nicolas Roche about 1 month ago

  • Assignee set to Nicolas Roche

#2 Updated by Nicolas Roche about 1 month ago

J'ai rencontré des difficultés sur l'enregistrement des réponses en base en rejouant les tests.
En l'état, quand ça ne passe pas je ne logue rien.
  • sur test_family.py
    je peux contourner avec un .decode('utf-8', errors='ignore').encode()
      UnicodeDecodeError: 'utf8' codec can't decode byte 0x93
    
  • sur test_opengis.py
    il s'agit d'une image ; même erreur plus une autre que je n'arrive pas à contourner.

Aussi, j'ai fait apparaître dans le nom de la clé du dictionnaire le fait que la réponse provient du cache et non pas de l'application métier : encore un choix discutable.

#3 Updated by Benjamin Dauvergne about 1 month ago

Nicolas Roche a écrit :

J'ai rencontré des difficultés sur l'enregistrement des réponses en base en rejouant les tests.
En l'état, quand ça ne passe pas je ne logue rien.
  • sur test_family.py
    je peux contourner avec un .decode('utf-8', errors='ignore').encode()

force_text(..., errors='ignore') lors du log.

[...]
  • sur test_opengis.py
    il s'agit d'une image ; même erreur plus une autre que je n'arrive pas à contourner.

Même avec errors='ignore' ? Dans ce cas fallback sur un chaîne explicative de l'absence des données : '<binary>' ou alors encore une partie en base64 si on juge que ça peut être utile d'avoir un extrait d'un document (m'enfin ça va bien charger les logs).

Aussi, j'ai fait apparaître dans le nom de la clé du dictionnaire le fait que la réponse provient du cache et non pas de l'application métier : encore un choix discutable.

Mouais toujours dans 'response' plutôt que connector_response mais tu peux mettre à coté un 'from_cache': True.

#4 Updated by Nicolas Roche about 1 month ago

ou alors encore une partie en base64 si on juge que ça peut être utile

Je pensais qu'on pourrait toujours récupérer cette info via les logs simples (def log_http_request),
mais j'avoue que je n'arrive pas à le mettre en évidence.
(du coup je veux bien une piste pour m'orienter dans ce ticket, svp)

#5 Updated by Benjamin Dauvergne about 1 month ago

Nicolas Roche a écrit :

ou alors encore une partie en base64 si on juge que ça peut être utile

Je pensais qu'on pourrait toujours récupérer cette info via les logs simples (def log_http_request),
mais j'avoue que je n'arrive pas à le mettre en évidence.

Désolé je ne comprends pas ta réponse.

#6 Updated by Nicolas Roche about 1 month ago

C'est que ce n'est pas clair pour moi non plus (d'ailleurs c'est l'occasion pour moi de voir si j'ai bien compris).
passerelle/utils/_init__.py_:

def log_http_request(logger, ...):    if response is not None:
...
        if logger.level == 10:  # DEBUG
...
                content = response.content[:max_size]
                extra['response_content'] = repr(content)

Je pense que ce code fait déjà ce que demande ce ticket, mais dans les logs "standards" (ie: /var/log/...).
Si vraiment on veux chercher du binaire dans les logs, on peut envisager de ne pas le faire via l'IHM (ie: l'objet de ce ticket)

#7 Updated by Benjamin Dauvergne about 1 month ago

Nicolas Roche a écrit :

C'est que ce n'est pas clair pour moi non plus (d'ailleurs c'est l'occasion pour moi de voir si j'ai bien compris).
passerelle/utils/_init__.py_:
[...]
Je pense que ce code fait déjà ce que demande ce ticket, mais dans les logs "standards" (ie: /var/log/...).
Si vraiment on veux chercher du binaire dans les logs, on peut envisager de ne pas le faire via l'IHM (ie: l'objet de ce ticket)

Ok, je pense qu'il faut coordonner tout le monde et décider si on veut les mêmes informations dans les logs structuré et dans les logs de resource (je pense d'ailleurs que tout le bordel dans ProxyLogger est inutile on aurait pu s'en sortir avec un handler et un LogWrapper qui met juste la resource dans 'extra', mais soit..).

#8 Updated by Nicolas Roche 21 days ago

coordonner tout le monde

Vu ensemble ce lundi, '<binary>' ça passe.

Also available in: Atom PDF