2013-04-17 9 views

Antwort

-1

Ich dachte, das würde helfen: Handler.setLevel(lvl)

Der Schwellenwert für diese Handler lvl Sets. Das Protokollieren von Nachrichten, die weniger streng als lvl sind, wird ignoriert. Wenn ein Handler erstellt wird, wird der Level auf NOTSET gesetzt (wodurch alle Nachrichten verarbeitet werden).

Aber jetzt sehe ich, dass es nicht tun, was würden Sie wollen, (Split-INFO/DEBUG von WARNING/ERROR)

aber sagen, dass Sie könnte einen benutzerdefinierten Handler schreiben (eine Klasse logging.StreamHandler zum Beispiel erstreckt) und überschreiben Sie die Handler.handle() Methode.

+0

Dies ist nicht genug WARNUNG Anschlag * bis * Nachrichten an stdout angemeldet sein * noch *. –

+1

Ein Filter wäre wahrscheinlich besser. – glglgl

+0

Richtig, ich habe es nach dem Posten meiner Antwort bemerkt. Jetzt behoben. –

30

Dies scheint zu tun, was ich will:

#!/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) 
Verwandte Themen