2013-04-17 22 views

Odpowiedz

-1

myślałem, że to pomoże: Handler.setLevel(lvl)

Ustawia próg dla tej obsługi LVL. Rejestrowanie wiadomości, które są mniej surowe niż lvl, zostanie zignorowane. Kiedy tworzony jest program obsługi, poziom jest ustawiony na NOTSET (co powoduje przetworzenie wszystkich komunikatów).

Ale teraz widzę, że to nie to, co chcesz (Split INFO/debug z Ostrzeżenie/błąd)

Mając na uwadze powyższe, można napisać program obsługi niestandardowych (klasa rozszerzenie logging.StreamHandler na przykład) i zastąpić metodę Handler.handle().

+0

To nie wystarczy do zatrzymania wiadomości * * UWAGA być zalogowany na stdout * nadal *. –

+1

Filtr prawdopodobnie byłby lepszy. – glglgl

+0

Prawidłowo, zauważyłem to po opublikowaniu mojej odpowiedzi. Naprawiono teraz. –

30

To wydaje się robić to, co chcę:

#!/usr/bin/python 
    import sys 
    import logging 

    class InfoFilter(logging.Filter): 
     def filter(self, rec): 
      return rec.levelno in (logging.DEBUG, logging.INFO) 

    logger = logging.getLogger('__name__') 
    logger.setLevel(logging.DEBUG) 

    h1 = logging.StreamHandler(sys.stdout) 
    h1.setLevel(logging.DEBUG) 
    h1.addFilter(InfoFilter()) 
    h2 = logging.StreamHandler() 
    h2.setLevel(logging.WARNING) 

    logger.addHandler(h1) 
    logger.addHandler(h2) 
Powiązane problemy