2016-02-28 15 views
5

Od Pythona 3.2, logging.Logger.setLevel akceptuje poziom ciągu, taki jak "INFO" zamiast odpowiedniej stałej liczbowej. Jest to bardzo przydatne, z tym że nie można porównywać poziomów w ten sposób, a większość innych metod logowania akceptuje tylko liczby całkowite. Jak przekonwertować łańcuch poziomu na poziom liczbowy za pomocą funkcji dostępnych w pakiecie logging? Konkretnie chciałbym coś, co robi to:Jak przekonwertować nazwę poziomu rejestrowania python na kod całkowity

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

Odpowiedz

7

Jak o użyciu coś jak

$ 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

To jest dokładnie to, czego szukałem. Zapytanie bez modyfikowania stanu żadnego rejestratora. –

2

.level zwraca poziom numeryczną przypadku rejestrowania.

Demo:

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

Jest to bardzo przydatne i odpowiada na moje dosłowne pytanie. Chcę jednak móc uzyskać numer bez ustawiania poziomu dziennika. –

2

Istnieje kilka cech w module logging które pozwalają tej funkcji. Są one poprzedzone podkreśleniem, sugerującym prywatność, więc ich używanie nie jest dobrym pomysłem. Jednakże:

Na najwyższym poziomie znajduje _checkLevel, która odbywa poziom, który jest albo ciąg lub liczbę całkowitą i albo zwraca odpowiedni poziom istniejący lub podnosi ValueError.

_checkLevel zawija słownik _nameToLevel, który zawiera wszystkie zarejestrowane poziomy (i jest aktualizowany przez addLevelName).

Istnieje dodatkowy element o nazwie _levelToName zawierający odwrotne odwzorowanie. Jest publicznie dostępny za pośrednictwem metody getLevelName.

Powiązane problemy