Protokollierung
Python verfügt bereits über ein hervorragendes integriertes Protokollierungsmodul . Möglicherweise möchten Sie hier die Protokollierungsvorlage verwenden .
Mit dem Protokollierungsmodul können Sie einen Wichtigkeitsgrad angeben. Während des Debuggens können Sie alles protokollieren, während Sie während des normalen Betriebs möglicherweise nur kritische Dinge protokollieren. Sie können Dinge ein- und ausschalten.
Die meisten Benutzer verwenden nur einfache Druckanweisungen zum Debuggen und entfernen dann die Druckanweisungen. Es ist besser, sie zu belassen, aber zu deaktivieren. Wenn Sie dann einen anderen Fehler haben, können Sie einfach alles wieder aktivieren und Ihre Protokolle überprüfen.
Dies kann der beste Weg sein, um Programme zu debuggen, die schnell erledigt werden müssen, z. B. Netzwerkprogramme, die reagieren müssen, bevor das andere Ende der Netzwerkverbindung abläuft und nicht mehr funktioniert. Möglicherweise haben Sie nicht viel Zeit, um einen Debugger in einem Schritt auszuführen. Aber Sie können einfach Ihren Code laufen lassen und alles protokollieren, dann die Protokolle durchforsten und herausfinden, was wirklich passiert.
BEARBEITEN: Die ursprüngliche URL für die Vorlagen lautete: http://aymanh.com/python-debugging-techniques
Diese Seite fehlt, daher habe ich sie durch einen Verweis auf den unter archive.org gespeicherten Schnappschuss ersetzt: http://web.archive.org/web/20120819135307/http://aymanh.com/python-debugging-techniques
Falls es wieder verschwindet, hier sind die Vorlagen, die ich erwähnt habe. Dies ist Code aus dem Blog; Ich habe es nicht geschrieben.
import logging
import optparse
LOGGING_LEVELS = {'critical': logging.CRITICAL,
'error': logging.ERROR,
'warning': logging.WARNING,
'info': logging.INFO,
'debug': logging.DEBUG}
def main():
parser = optparse.OptionParser()
parser.add_option('-l', '--logging-level', help='Logging level')
parser.add_option('-f', '--logging-file', help='Logging file name')
(options, args) = parser.parse_args()
logging_level = LOGGING_LEVELS.get(options.logging_level, logging.NOTSET)
logging.basicConfig(level=logging_level, filename=options.logging_file,
format='%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
# Your program goes here.
# You can access command-line arguments using the args variable.
if __name__ == '__main__':
main()
Und hier ist seine Erklärung, wie man das Obige benutzt. Auch hier bekomme ich keine Anerkennung:
Standardmäßig druckt das Protokollierungsmodul kritische Meldungen, Fehlermeldungen und Warnmeldungen. Verwenden Sie Folgendes, um dies so zu ändern, dass alle Ebenen gedruckt werden:
$ ./your-program.py --logging=debug
Verwenden Sie Folgendes, um Protokollnachrichten an eine Datei mit dem Namen debug.log zu senden:
$ ./your-program.py --logging-level=debug --logging-file=debug.log