2014-01-14 13 views
9

Ich versuche, Protokollierung in Python zu verwenden, um etwas Protokoll zu schreiben, aber seltsamerweise wird nur die error geloggt, die info wird ignoriert, egal welche Ebene ich eingestellt.Python Logger funktioniert nicht

Code:

import logging 
import logging.handlers 

if __name__ == "__main__": 
    logger = logging.getLogger() 
    fh = logging.handlers.RotatingFileHandler('./logtest.log', maxBytes=10240, backupCount=5) 
    fh.setLevel(logging.DEBUG)#no matter what level I set here 
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
    fh.setFormatter(formatter) 
    logger.addHandler(fh) 
    logger.info('INFO') 
    logger.error('ERROR') 

Das Ergebnis ist:

2014-01-14 11:47:38,990 - root - ERROR - ERROR 

Nach http://docs.python.org/2/library/logging.html#logging-levels

Die INFO sollte auch protokolliert werden.

Antwort

15

Das Problem ist, dass die Logger Ebene immer noch auf den Standardwert festgelegt ist. Der Logger verwirft die Nachricht, bevor sie überhaupt an die Handler gelangt. Die Tatsache, dass der Handler die Nachricht akzeptiert hätte, wenn sie empfangen wurde, spielt keine Rolle, weil sie sie niemals empfängt. So

, fügen Sie einfach diese:

logger.setLevel(logging.INFO) 

Wie the docs erklären, wird die Standardebene des Loggers NOTSET ist, was bedeutet, dass sie mit ihren Eltern überprüft, die die Wurzel ist, die einen Standardwert von WARNING hat.

Und Sie können wahrscheinlich den Handler auf den Standardwert NOTSET verlassen, was bedeutet, dass es sich auf die Filterung des Loggers verschiebt.

3

Ich denke, Sie müssen möglicherweise den richtigen Schwellenwert festlegen.

logger.setLevel(logging.INFO) 
+1

Nun, er _does_ die Schwelle ... nur nicht die richtige. – abarnert

+0

wahr .. aber Ihre Antwort ist prägnanter. Ich habe es versucht :-) –