2016-07-22 11 views
1

Ich möchte alle Warnungen protokollieren unter der Annahme, dass captureWarnings auf True sollte den Trick tun. Aber das tut es nicht. Code: captureWarnings auf True gesetzt erfasst keine Warnungen

import logging 
import warnings 

from logging.handlers import RotatingFileHandler 

logger_file_handler = RotatingFileHandler(u'./test.log') 
logger_file_handler.setLevel(logging.DEBUG) 

logging.captureWarnings(True) 

logger = logging.getLogger(__name__) 

logger.addHandler(logger_file_handler) 
logger.setLevel(logging.DEBUG) 

logger.info(u'Test') 
warnings.warn(u'Warning test') 

Meine Erwartungen ist, dass 'Warnung Test' in test.log erscheinen sollte, aber nicht nur 'Test' wird in Log-Datei setzen.

Wie werden alle Warnungen erfasst und in die Protokolldatei umgeleitet?

Python 2.7.5

Antwort

4

Von der logging.captureWarnings Dokumentation:

Warnungen durch die Warnungen Modul ausgegeben werden das Logging-System weitergeleitet. Insbesondere wird eine Warnung formatiert mit warnings.formatwarning() und die resultierende Zeichenfolge bei einem Protokollierer protokolliert namens 'py.warnings' mit einem Schweregrad von WARNUNG.

Sie wollen wahrscheinlich etwas wie folgt aus:

import logging 
import warnings 

from logging.handlers import RotatingFileHandler 

logger_file_handler = RotatingFileHandler(u'test.log') 
logger_file_handler.setLevel(logging.DEBUG) 

logging.captureWarnings(True) 

logger = logging.getLogger(__name__) 
warnings_logger = logging.getLogger("py.warnings") 

logger.addHandler(logger_file_handler) 
logger.setLevel(logging.DEBUG) 
warnings_logger.addHandler(logger_file_handler) 

logger.info(u'Test') 
warnings.warn(u'Warning test') 

Hoffe, es hilft!

1

logging.captureWarnings ist Logger nicht verwenden. Es verwendet einen Protokollierer mit dem Namen 'py.warnings'. Sie müssen diesen Logger so konfigurieren, dass er das macht, was Sie wollen.

Verwandte Themen