Bug #24245
crash sur log de l'info sur un statut inconnu
0%
Description
Exception: type = '<type 'exceptions.UnicodeDecodeError'>', value = ''ascii' codec can't decode byte 0xc3 in position 68: ordinal not in range(128)' ... File "/usr/lib/python2.7/logging/__init__.py", line 1186, in error 1184 """ 1185 if self.isEnabledFor(ERROR): > 1186 self._log(ERROR, msg, args, **kwargs) 1187 1188 def exception(self, msg, *args, **kwargs): locals: args = () kwargs = {} msg = 'reference to invalid status in workflow Test GRC - simple, status Re\xc3\xa7u, item Automatic Jump' self = <logging.Logger object at 0x7f0225b9d350>
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a presque 6 ans
En fait, ici, il y a je pense surtout que la partie logging de django n'étant pas utilisée, il faudrait un LOGGING = {}
dans la config. (j'ai tapé ça dans le settings.d/ de auquo-test pour voir).
Mis à jour par Frédéric Péters il y a presque 6 ans
- Fichier 0001-debian-disable-django-logging-as-it-s-too-sensitive-.patch 0001-debian-disable-django-logging-as-it-s-too-sensitive-.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Du coup, (?)
Mis à jour par Emmanuel Cazenave il y a presque 6 ans
- Fichier 0001-avoid-string-interpolation-in-logger-call-24245.patch 0001-avoid-string-interpolation-in-logger-call-24245.patch ajouté
Pas testé, mais on pourrait essayer ça d'abord (si j'en crois https://www.simonmweber.com/2014/11/24/python-logging-traps.html).
Mis à jour par Frédéric Péters il y a presque 6 ans
A priori ça décalerait juste le moment du crash. Et taper du %r n'est pas une solution non plus je trouve.
Si on veut travailler à utiliser l'infra de logging de Django, très bien, mais pour le moment ce n'est pas le cas et avoir un LOGGING non vide est trompeur.
Mis à jour par Emmanuel Cazenave il y a presque 6 ans
Frédéric Péters a écrit :
A priori ça décalerait juste le moment du crash.
Juste pour info, l'exception serait attrapée proprement je crois https://docs.python.org/3/howto/logging.html#exceptions-raised-during-logging
Mais après avoir fait un journalctl -u wcs.service
, je vois que c'est le quasi néant en record provenant de l'application, donc autant désactiver.
Donc ack pour le tien.
Et à la réflexion je comprends pas pourquoi ça plante si bas dans la stack, donc ma remarque "l'exception serait attrapée proprement" est peut-être fumeuse. Bref j'y comprends plus rien.
Mis à jour par Thomas Noël il y a presque 6 ans
Bien que LOGGING={} sur wcs.test, on y reçoit encore ces traces. Le problème doit être ailleurs.
La trace un peu plus complète :
Exception: type = '<type 'exceptions.UnicodeDecodeError'>', value = ''ascii' codec can't decode byte 0xc3 in position 41: ordinal not in range(128)' Stack trace (most recent call first): File "/usr/lib/python2.7/dist-packages/django/utils/log.py", line 115, in emit 113 subject = '%s: %s' % ( 114 record.levelname, > 115 record.getMessage() 116 ) 117 request = None locals: record = <logging.LogRecord object at 0x7fce50068710> request = <WSGIRequest: GET '/backoffice/workflows/13/'> self = <django.utils.log.AdminEmailHandler object at 0x7fce62c50790> File "/usr/lib/python2.7/logging/__init__.py", line 759, in handle 757 self.emit(record) 758 finally: > 759 self.release() 760 return rv 761 locals: record = <logging.LogRecord object at 0x7fce50068710> rv = 1 self = <django.utils.log.AdminEmailHandler object at 0x7fce62c50790> File "/usr/lib/python2.7/logging/__init__.py", line 1329, in callHandlers 1327 found = found + 1 1328 if record.levelno >= hdlr.level: > 1329 hdlr.handle(record) 1330 if not c.propagate: 1331 c = None #break out locals: c = <logging.RootLogger object at 0x7fce660b1e90> found = 3 hdlr = <django.utils.log.AdminEmailHandler object at 0x7fce62c50790> record = <logging.LogRecord object at 0x7fce50068710> self = <logging.Logger object at 0x7fce584b08d0> File "/usr/lib/python2.7/logging/__init__.py", line 1289, in handle 1287 """ 1288 if (not self.disabled) and self.filter(record): > 1289 self.callHandlers(record) 1290 1291 def addHandler(self, hdlr): locals: record = <logging.LogRecord object at 0x7fce50068710> self = <logging.Logger object at 0x7fce584b08d0> File "/usr/lib/python2.7/logging/__init__.py", line 1279, in _log 1277 exc_info = sys.exc_info() 1278 record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra) > 1279 self.handle(record) 1280 1281 def handle(self, record): locals: args = () exc_info = None extra = None fn = '/usr/lib/python2.7/dist-packages/wcs/workflows.py' func = 'get_target_status' level = 40 lno = 1733 msg = 'reference to invalid status in workflow R\xc3\xa9seau accueil - Contact, status En couple, item Automatic Jump' record = <logging.LogRecord object at 0x7fce50068710> self = <logging.Logger object at 0x7fce584b08d0> File "/usr/lib/python2.7/logging/__init__.py", line 1186, in error 1184 """ 1185 if self.isEnabledFor(ERROR): > 1186 self._log(ERROR, msg, args, **kwargs) 1187 1188 def exception(self, msg, *args, **kwargs): locals: args = () kwargs = {} msg = 'reference to invalid status in workflow R\xc3\xa9seau accueil - Contact, status En couple, item Automatic Jump' self = <logging.Logger object at 0x7fce584b08d0> File "/usr/lib/python2.7/dist-packages/wcs/workflows.py", line 1733, in get_target_status 1731 self.parent.parent.name, 1732 self.parent.name, > 1733 self.description)) 1734 return targets 1735 ...
Mis à jour par Frédéric Péters il y a presque 6 ans
Regarder ce que fait Django en cas de LOGGING = {}
, du coup, puis changer les choses pour arriver à écrire un LOGGING
qui dise que non non rien.
Mis à jour par Thomas Noël il y a presque 6 ans
et en fait, faut pas logguer avec error(msg % ...)
mais avec error(msg, ...)
et ça passe (testé vite sur https://dev.entrouvert.org/issues/24312)
Si ok, sans doute que le message de commit peut être moins moche.
Mis à jour par Thomas Noël il y a presque 6 ans
Frédéric Péters a écrit :
Ça passe parce que ça loggue pas ?
Et m*rde... effectivement. Honte. Finalement, je ne comprends rien non plus. Bien que honteux, je laisse mon sale hack en recette parce que le crashe gène aussi #24313 :/
Mis à jour par Frédéric Péters il y a presque 6 ans
J'écrivais :
Et taper du %r n'est pas une solution non plus je trouve.
Mais comme zéro envie d'attendre, go pour le %r :/
Mis à jour par Thomas Noël il y a presque 6 ans
- Fichier 0001-use-repr-on-logging-invalid-status-24245.patch 0001-use-repr-on-logging-invalid-status-24245.patch ajouté
genre, ça ?
Mis à jour par Thomas Noël il y a presque 6 ans
- Statut changé de En cours à Résolu (à déployer)
commit 635e309d41eaf246ebb918ecd975ad665d62e2e0 Author: Thomas NOEL <tnoel@entrouvert.com> Date: Wed Jun 6 14:33:38 2018 +0200 use repr on logging invalid status (#24245)
Et je retire les LOGGING={} des wcs/settings.d
Mis à jour par Thomas Noël il y a presque 6 ans
hotfixé sur recette (prod pas impactée, #23894 n'y est pas encore)
Mis à jour par Frédéric Péters il y a presque 6 ans
- Lié à Bug #24353: erreur d'encodage des logs sur les statuts comportant des accents ajouté
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
use repr on logging invalid status (#24245)