2017-06-25 1 views
0

Ich versuche, die Django-Protokollierung für die Protokollierung von Warnmeldungen zu konfigurieren. Normalerweise hätte ich keinen Formatierer wie diesen oder gebe ihn an die Konsole aus, nur um zu testen und zu zeigen, dass er nicht funktioniert.Warnungen in Django protokollieren: Filter gibt nichts zurück

Hier ist mein Code: "Das funktioniert"

def is_deprecated(record): 
    if record.exc_info: 
     exc_type, exc_value = record.exc_info[:2] 
     print(exc_value) 
     if isinstance(exc_value, DeprecationWarning) or isinstance(exc_value, PendingDeprecationWarning): 
      return True 
    return False 

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'stuff': { 
      'format': 'This works!' 
     } 
    }, 
    'filters': { 
     'is_deprecated': { 
      '()': 'django.utils.log.CallbackFilter', 
      'callback': is_deprecated, 
     }, 
    }, 
    'handlers': { 
     'console': { 
      'filters': ['is_deprecated'], 
      'class': 'logging.StreamHandler', 
      'formatter': 'stuff', 
     }, 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['console'], 
      'level': 'INFO', 
     }, 
    }, 
} 

Es Ausgabe sollte Wenn es eine Verwarnungswarnung trifft, wird dies jedoch nicht der Fall sein. Ich arbeite mit Python mit diesen Warnungen auf

Python -wd

So kann ich die regelmäßige Django Alarm sehen, aber ich kann nicht den Logger bekommen, um sie zu erkennen.

Antwort

0

Offenbar die Sie verwenden das -Wd Argument es die Warnung anzeigt, ist aber nicht als Ausnahme behandelt (Django melden Sie sich nur Exceptions) Sie dieses Verhalten ändern können warnings.simplefilter('error') in anfänglicher Teil mit (wie die settings.py, init Py, manage.py, etc.) oder verwenden Sie den Befehl python -W error

Referenz: https://docs.python.org/2/library/warnings.html#the-warnings-filter

+1

Auf dieses wird simple die äquivalente Ausnahme ausgelöst. Wenn Sie dies nicht möchten, können Sie dieser Lösung folgen, um die Warnungen mit Djangos Protokollierung im Hintergrund zu verarbeiten. https://stackoverflow.com/questions/40752766/how-to-log-python-warnings-in-a-django-log -Datei – Chaos