Projet

Général

Profil

Bug #24245

crash sur log de l'info sur un statut inconnu

Ajouté par Frédéric Péters il y a presque 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
03 juin 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Lié à w.c.s. - Bug #24353: erreur d'encodage des logs sur les statuts comportant des accentsRejeté07 juin 2018

Actions

Révisions associées

Révision 635e309d (diff)
Ajouté par Thomas Noël il y a presque 6 ans

use repr on logging invalid status (#24245)

Historique

#1

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).

#3

Mis à jour par Frédéric Péters il y a presque 6 ans

Du coup, (?)

#5

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.

#6

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.

#8

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

...

#9

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.

#11

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.

#12

Mis à jour par Frédéric Péters il y a presque 6 ans

Ça passe parce que ça loggue pas ?

#13

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 :/

#15

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 :/

#17

Mis à jour par Frédéric Péters il y a presque 6 ans

yep.

#18

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

#19

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)

#20

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é
#21

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

Formats disponibles : Atom PDF