2012-04-08 12 views
1

Ich versuche, eine Ausnahmebehandlung Mechanismus mit mehreren Ebenen von Informationen für den Benutzer für meine Anwendung mit Python Logging-Modul anzuzeigen.Python - Selektive Behandlung der Ausnahme Traceback

In der Anwendung verfügt das Protokollierungsmodul über zwei Handler: einen Dateihandler zum Speichern von DEBUG-Informationen und einen Stream-Handler zum Speichern von INFO-Informationen. Standardmäßig ist die Protokollierungsstufe auf INFO eingestellt. Was ich versuche zu erreichen, ist ein Setup, bei dem, wenn eine Ausnahme auftritt, dem Benutzer eine einfache Fehlermeldung ohne Rückverfolgung angezeigt wird. Wenn die Protokollierungsstufe auf DEBUG gesetzt ist, sollte der Benutzer immer noch die einfache Nachricht nur erhalten, aber dieses Mal wird der Ausnahme-Traceback in einer Protokolldatei über den Dateihandler protokolliert.

Ist es möglich, dies zu erreichen?

Ich versuchte mit logger.exception(e), aber es druckt immer das Traceback auf der Konsole.

Antwort

2

Das Modul traceback kann Ihnen helfen. Auf der obersten Ebene Ihrer Anwendung sollten Sie einen Haken alle Anweisung setzen:

setup_log_and_other_basic_services() 
try: 
    run_your_app() 
except Exception as e: 
    if is_debug(): 
     traceback.print_stack() 
    else: 
     traceback.print_stack(get_log_file()) 
    print e 

der Code außerhalb des try/catch-Block sollte nicht abstürzen zugelassen werden.

+0

mit dieser Lösung ist das gedruckte Traceback dasjenige, das in dem Ausnahmeblock beginnt, nicht dasjenige, das von der Ausnahme beginnt. Es hilft nicht wirklich, die Quelle des Absturzes zu lokalisieren. –

0

Schreiben Sie Ihre benutzerdefinierte Ausnahmebehandlungsfunktion und verwenden Sie sie jedes Mal, wenn Sie Catch schreiben.

In dieser Funktion sollten Sie prüfen, welcher Modus eingeschaltet ist (INFO oder DEBUG) und dann Informationen über die Ausnahme extrahieren und sie bei Bedarf manuell in den Logger einspeisen.