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