2016-02-28 9 views
5

Ab Python 3.2 akzeptiert logging.Logger.setLevel eine Zeichenfolgenebene wie 'INFO' anstelle der entsprechenden Ganzzahlkonstante. Dies ist sehr praktisch, außer dass Sie die Ebenen nicht auf diese Weise numerisch vergleichen können und die meisten anderen Protokollierungsmethoden nur ganze Zahlen akzeptieren. Wie konvertiere ich eine Level-Zeichenkette auf eine numerische Ebene mit den Funktionen des logging Pakets? Insbesondere möchte ich etwas, das dies tut:So konvertieren Sie den Python-Protokollierungsebenennamen in den Ganzzahlcode

>>> logging.???('INFO') == logging.INFO 
True 

Antwort

7

Wie wäre es so etwas wie

$ python 
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import logging 
>>> getattr(logging, 'INFO') 
20 
>>> getattr(logging, 'DEBUG') 
10 
>>> getattr(logging, 'ERROR') 
40 
>>> 
+0

Genau das habe ich gesucht. Eine Abfrage, ohne den Status eines Loggers zu ändern. –

2

.level gibt den numerischen Niveau des Protokolliervorgangs.

Demo:

>>> logger = logging.getLogger() 
>>> logger.setLevel('INFO') 
>>> logger.level == logging.INFO 
True 
+1

Dies ist sehr nützlich und beantwortet meine wörtliche Frage. Ich möchte jedoch in der Lage sein, die Nummer zu erhalten, ohne den Loglevel zu setzen. –

2

Es gibt ein paar Attribute im logging-Modul, das diese Funktionalität zu ermöglichen. Ihnen wird ein Unterstrich vorangestellt, der Privatsphäre bedeutet, also ist es keine gute Idee, sie zu verwenden. Jedoch:

Auf der höchsten Ebene, ist es _checkLevel, die einen Pegel annimmt, der entweder eine Zeichenfolge oder eine ganze Zahl ist und entweder gibt die entsprechende bestehenden Ebene oder wirft ein ValueError.

_checkLevel Wraps das Wörterbuch _nameToLevel, die alle registrierten Ebenen enthält (und wird von addLevelName aktualisiert).

Es gibt ein zusätzliches Element namens _levelToName, das die umgekehrte Zuordnung enthält. Es ist öffentlich zugänglich über die getLevelName Methode.