Python-logging-Modul mit einem formatter verursacht AttributeError
Schreibe ich eine terminal-Anwendung, die, nachdem Sie in -v
option, bekommt, wenig überraschend, ausführlichen. Ich möchte die Ausgabe im terminal zur Verfügung, die für einfache Tests (es wird umgeleitet, um eine log-Datei, wenn die Ausführung als cron-sowieso).
Jedoch, python logging
Modul erlaubt mir nicht zu schreiben, die Nachrichten mit entsprechenden Ebenen bei Verwendung eines formatters. (Formatter ist kopiert direkt von Python-Logging-Cookbok)
Dieses Verhalten ist nicht beschränkt auf Python ist3 nur. Python2.7 stellt sich die gleiche Ausnahme unter den gegebenen Bedingungen.
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 Ausgabe
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 (funktioniert wie ein 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 Ausgabe
Blah
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt
Versuchen:
Was passiert ist, ist, dass im ersten Fall weisen Sie der Rückkehr der
setFormatter()
zu denhandler
variable, abersetFormatter()
nicht zurück handler (d.h. es gibtNone
)