2013-07-19 5 views
5

Ich möchte nur in der Lage sein, die Konsole Log-Level in der Einstellungsdatei zu überschreiben. Ich lese die django logging document, aber ich habe Probleme, die Protokollierung tun, was ich will. Die Dokumentation versichert mir, dass:prägnante Möglichkeit, Django-Konsole Log-Level zu ändern

"Von Django 1.5 vorwärts wird die Protokollierungskonfiguration des Projekts mit den Standardeinstellungen von Django zusammengeführt, so dass Sie entscheiden können, ob Sie die vorhandene Konfiguration hinzufügen oder ersetzen möchten. Setzen Sie den Schlüssel disable_existing_loggers im LOGGING dictConfig auf True. Alternativ können Sie einige oder alle Logger neu definieren. "

Also habe ich versucht, nur das Hinzufügen von folgenden meiner settings.py:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'console':{ 
      'level': 'DEBUG', 
     }, 
    }, 
} 

... aber ich erhalte eine Ausnahme:

<snip> 
    File "/usr/lib/python2.7/logging/config.py", line 575, in configure 
    '%r: %s' % (name, e)) 
ValueError: Unable to configure handler 'console': 'NoneType' object has no attribute 'split' 

Fair enough. Es scheint den gesamten Konfigurationsblock zu wollen. Also versuchte ich, was ich dachte, wäre die einfachste Konsole Logger config:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': True, 
    'formatters': { 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'console':{ 
      'level': 'INFO', 
      'class': 'logging.StreamHandler', 
      'formatter': 'simple' 
     }, 
    }, 
    'loggers': { 
     'default': { 
      'handlers': ['console'], 
      'level': 'INFO', 
      'filters': [] 
     } 
    } 
} 

Meine Absicht ist es, die Protokollebene auf INFO zu setzen, aber ich habe noch ein paar DEBUG-Nachrichten sehen, und die Zeichenfolge MYFORMATTER nicht erscheint in jedem von ihnen sowieso.

schließlich mit blindem Optimismus, ich versuchte, dies:

from django.utils.log import DEFAULT_LOGGING 
DEFAULT_LOGGING['handlers']['console']['level'] = 'INFO' 

ich etwas ganz offensichtlich hier nicht fehlen darf.

BTW, ich benutze Django 1.5.1.

+0

Möglicherweise interessiert Sie [Sentry] (https://github.com/getsentry/sentry). –

Antwort

3

hier meine eigene Frage zu beantworten, wurde ich mit der folgenden in der Datei settings.py steigen:

import logging 

logging.basicConfig(
    level = logging.INFO, 
    format = " %(levelname)s %(name)s: %(message)s", 
) 
0

Sie dies tun, können die django Protokollierungsstufe einzustellen:

import logging 
logging.disable(logging.INFO) 

logging.disable (lvl)

Bietet eine übergeordnete Ebene lvl für alle Logger, die eigene Vorrang vor dem Loggers erfolgt Niveau. Wenn der Bedarf nach vorübergehend Protokollierung Ausgabe über die gesamte Anwendung, Drosselung dieser Funktion kann nützlich sein. Seine Wirkung ist, alle Logging Aufrufe der Schwere lvl und darunter zu deaktivieren, so dass, wenn Sie es mit einem Wert von INFO aufrufen, dann würden alle INFO und DEBUG Ereignisse verworfen werden, während diejenigen des Schweregrades WARNUNG und höher würde entsprechend verarbeitet werden bis der effektive Level des Loggers. Um die Auswirkung eines Aufrufs auf logging.disable (lvl) rückgängig zu machen, rufen Sie logging.disable (logging.NOTSET) auf.

http://docs.python.org/2/library/logging.html#logging.disable

+0

Hmm.Dies funktioniert jedoch nicht, wenn die zugrunde liegenden Protokollierer für das Drucken beispielsweise bei INFO konfiguriert sind und ich DEBUG-Nachrichten auf der Konsole anzeigen möchte. – user2076663

+0

ok, du hast das Gegenteil in deiner Frage gesagt;) – maazza

0

ich eine ähnliche themen- hatte ich eine „Klasse fehlt "von einem meiner Handler.

Verwandte Themen