Kurzantwort
Sie nicht benötigen es für Ihre Anwendung zu konfigurieren. Es ist nützlich, dies zu tun.
Lange Antwort
Das logging Modul ist ein Python-Modul, das jede Python-Code ermöglicht es, Informationen in einer Art und Weise zu protokollieren, die Ausgangsunabhängig auf die tatsächliche Anwendung ist es zu benutzen. Bibliotheken in jeder Tiefe können das Protokollierungsmodul, Protokollinformationen, Warnungen, Fehler usw. importieren und müssen nicht genau wissen, wie der Benutzer sie empfängt.
Was Sie sehen, ist in Bezug auf das Fehlen eines Handlers in Ihrer eigenen Anwendung. ZODB protokolliert offensichtlich Informationen, aber da Sie keinen Handler definiert haben, verdampft diese Protokollierungsinformation gerade in den Äther. Es benachrichtigt Sie, wenn Sie möchten, dass einige Protokollierung Informationen sehen, sollten Sie
Vom Logging Cookbook einen Handler definieren:
import logging
# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)
diesem Beispiel wird ein Logger mit einem Namen für Ihre App. Es erstellt dann zwei Arten von Handlern. Einer ist ein Dateihandler, um DEBUG-Level-Protokolle in eine Datei zu schreiben. Der zweite ist ein Stream-Handler, der Fehler an Ihre Konsole sendet.
Wenn Sie wollten ausführlichere Informationen gehen an die Konsole sehen, können Sie die Protokollebene zu INFO ändern:
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
Auch das Konzept der „Formatierer“ bemerken. Sie können verschiedene Protokollformate für verschiedene Handler festlegen.
Wenn Sie zumindest einen Stream-Handler in Ihrer App erstellen, werden Sie nicht mehr gewarnt, dass kein Handler definiert wurde.
Für Python 2.7+ enthält das Modul logging
eine NullHandler
.Es soll in einer Bibliothek (z. B. Ihrer Datenbankbibliothek) als Standardhandler verwendet werden, der Fehler unterdrückt, wenn der Endbenutzer die Bibliothek ohne Protokollierungshandler verwendet (wie Sie es gerade tun). Wenn Sie sich also überhaupt nicht für das Protokollieren interessieren und es einfach zum Schweigen bringen möchten, können Sie in Ihrem eigenen Code eine NullHandler
hinzufügen. Es wird empfohlen, tatsächlich Protokollierung einrichten, aber das ist nur eine andere Optionen:
Adding NullHandler to the logger
import logging
logging.getLogger('spam_application').addHandler(logging.NullHandler())
möglich Duplikat [Python - Keine Handler für Logger „OpenGL.error“ gefunden] (http://stackoverflow.com/questions/345991/python-no-handlers-could-be-found-for-logger-opengl-error) –
Dies ist kein ZODB-Problem; Sie haben das Python-Protokollierungssystem in Ihrer Anwendung nicht konfiguriert. –
Ich habe gebeten, diese Frage zu löschen. Ich werde verwandte Frage zu diesem Beitrag aktualisieren. Dank JDI –