Python module de journalisation d'avoir un module de formatage des causes AttributeError
Je suis en train d'écrire une application de terminal, qui, après passage dans -v
option, il obtient sans surprise, détaillé. Je veux avoir la sortie dans le terminal, pour tester facilement (il obtient redirigé vers un fichier de log lors de l'exécution comme cron de toute façon).
Cependant, python logging
module ne m'autorise pas à écrire des messages avec les niveaux correspondants lors de l'utilisation d'un formateur. (Formateur est copié directement à partir de Python Journalisation Cookbok)
Ce comportement n'est pas limitée à Python3 seulement. Python2.7 fait la même exception dans les conditions données.
one.py
from sys import stdout
import logging
if __name__ == '__main__':
level = 20
log = logging.getLogger()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler = logging.StreamHandler(stdout).setFormatter(formatter)
log.addHandler(handler)
log.setLevel(level)
log.info("Blah")
one.py sortie
Traceback (most recent call last):
File "/home/tlevi/PycharmProjects/untitled/main.py", line 14, in <module>
log.info("Blah")
File "/usr/lib/python3.4/logging/__init__.py", line 1279, in info
self._log(INFO, msg, args, **kwargs)
File "/usr/lib/python3.4/logging/__init__.py", line 1414, in _log
self.handle(record)
File "/usr/lib/python3.4/logging/__init__.py", line 1424, in handle
self.callHandlers(record)
File "/usr/lib/python3.4/logging/__init__.py", line 1485, in callHandlers
if record.levelno >= hdlr.level:
AttributeError: 'NoneType' object has no attribute 'level'
two.py (fonctionne comme un charme)
from sys import stdout
import logging
if __name__ == '__main__':
level = 20
log = logging.getLogger()
handler = logging.StreamHandler(stdout)
log.addHandler(handler)
log.setLevel(level)
log.info("Blah")
two.py sortie
Blah
OriginalL'auteur sjaustirni | 2015-12-16
Vous devez vous connecter pour publier un commentaire.
Au lieu de
Essayer:
Ce qui se passe, c'est que dans le premier cas, vous attribuez le retour de
setFormatter()
à lahandler
variable, maissetFormatter()
n'a pas de retour de la fonction (c'est à dire qu'elle renvoieNone
)il pose la question "pourquoi est-il populaire?"
OriginalL'auteur Sebastian