2016-04-04 7 views
0

ich eine Django-Projekt, das die folgende Funktion hat, in dem ich einen Logger auslösen soll:Auslösen Python-Logger in Django-Projekt

def remove_email_from_list(list_id, email_address): 
    subscriber_hash = hashlib.md5(email_clean) 
    url = '%s/lists/%s/members/%s' % (settings.API_URL, list_id, subscriber_hash.hexdigest()) 
    r = requests.delete(url, auth=HTTPBasicAuth('user', settings.API_KEY),) 
    if r.status_code != 204: 
     logging.critical("Executed mailchimp api call, wrong status code. Message body = " + r.text) 
    return r 

Allerdings habe ich versucht, alle diese Logger diesen Fehler zu fangen und eine E-Mail senden , aber irgendwie wird der Logger nicht ausgelöst. Weißt du was ich falsch mache?

'loggers': { 
    'django': { 
     'handlers': ['mail_admins'], 
     'level': 'ERROR', 
     'propagate': True 
    }, 
    'django.request': { 
     'handlers': ['mail_admins'], 
     'level': 'ERROR', 
     'propagate': True 
    }, 
    'project_name.logging': { 
     'handlers': ['mail_admins'], 
     'level': 'ERROR', 
     'propagate': True, 
    }, 
    'django.logging': { 
     'handlers': ['mail_admins'], 
     'level': 'ERROR', 
     'propagate': True, 
    }, 

Antwort

3

Ich denke, wenn man logging.critical direkt anrufen, wird dies über den Standardlogger erfolgt. Erstellen Sie eine benannte Logger zunächst unter Verwendung (irgendwo im Kopf Ihrer py-Datei):

logger = logging.getLogger(__name__) 

und rufen dann

logger.critical(...) 

Dies sollte dann den Logger mit dem Paketnamen der Datei verwenden Sie sind in

Siehe Logger Objects Documentation

+0

Hmm ich noch einige Probleme habe, dies zu konfigurieren. Diese Datei (helper_functions.py) befindet sich im Stammverzeichnis meiner Anwendung "mail". Wenn ich meinen Logger als "api_logger" definieren würde, müsste ich den Logger mit "mail.api_logger" verwenden? Das fängt immer noch nicht meine Protokolle. – hY8vVpf3tyR57Xib

+0

Nein, nein ersetzt '__name__' nicht durch irgendeinen Brauch. '__name__' wird automatisch durch den gestrichelten Pfad des Moduls ersetzt. Wenn Sie "__name__" durch "api_logger" ersetzen, müssten Sie wahrscheinlich denselben Namen in der Logger-Konfiguration verwenden. – Tim

+1

Sorry, ich wollte nicht unhöflich sein und ein doppeltes 'Nein' benutzen. Ich wollte eigentlich 'Nein, tu' nicht schreiben. Auch die doppelten Unterstriche wurden durch Formatierung entfernt, sorry dafür. hätte "__name__" sein sollen – Tim