2012-06-25 14 views
12

Ich erstellte eine Datenbank mit ZODB, dann kopierte ich es auf einen anderen PC. Ich frage mich, warum jedes Mal, wenn ich in dieser Datenbank anmelden (die kopierten ein) ich diesen Fehler:Fehlermeldung "keine Handler für Logger ZODB.FileStorage gefunden werden konnte" auf kopierte ZODB-Datenbank

no handlers could be found for logger (ZODB.FileStorage) 

Hinweis: das Programm nicht brechen, es ausdrucken nur die Aussage in rot, als ob es ein Fehler ist.

Was ist diese nervige Nachricht und warum passiert es jedes Mal, wenn ich mich anmelde?

Update Nr. (1): Was ist das Python-Protokollierungssystem? Warum muss ich es in meiner Anwendung konfigurieren?

Hinweis:

  1. ich nur ZODB verwenden.

  2. Mein Betriebssystem ist Windows XP SP2.

+3

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) –

+1

Dies ist kein ZODB-Problem; Sie haben das Python-Protokollierungssystem in Ihrer Anwendung nicht konfiguriert. –

+0

Ich habe gebeten, diese Frage zu löschen. Ich werde verwandte Frage zu diesem Beitrag aktualisieren. Dank JDI –

Antwort

27

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()) 
+1

+1 für die Erklärung 'NullHandler'. –

Verwandte Themen