Speicherort der Django-Protokolle und -Fehler

77

Ich habe den Django-Server mit Nginx eingerichtet und auf einigen Seiten wird ein 403-Fehler angezeigt.

Wo finde ich die Django-Protokolle? Wo kann ich die Fehler im Detail sehen?

Yoni Doe
quelle
Was läuft zwischen Nginx und Django? Gunicorn? Verwenden Sie Supervisor?
Joseph
Haben Sie in Ihrer Datei settings.py DEBUG = True festgelegt? Wenn dies der Fall ist, handelt es sich wahrscheinlich um ein Django-Problem , falls die Fehler wie i.imgur.com/TWL6f.png aussehen . Wenn der 403-Fehler keine ausführliche Nachricht ist, würde ich vermuten, dass es sich um ein Nginx-Problem handelt. Wenn es sich um ein Django-Problem handelt, starten Sie Ihren Django-Server über die Konsole und rufen Sie die Seite auf, auf der der Fehler angezeigt wird. Hoffentlich reicht die Konsolenausgabe aus, um Ihr Problem zu lösen.
user1876508

Antworten:

76

Protokolle werden in Ihrer settings.pyDatei festgelegt. Ein neues Standardprojekt sieht folgendermaßen aus:

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

Standardmäßig werden keine Protokolldateien erstellt. Wenn Sie diese möchten, müssen Sie einen filenameParameter zu Ihrem hinzufügenhandlers

    'applogfile': {
        'level':'DEBUG',
        'class':'logging.handlers.RotatingFileHandler',
        'filename': os.path.join(DJANGO_ROOT, 'APPNAME.log'),
        'maxBytes': 1024*1024*15, # 15MB
        'backupCount': 10,
    },

Dadurch wird ein rotierendes Protokoll erstellt, das eine Größe von 15 MB hat und 10 historische Versionen enthält.

Im loggersAbschnitt von oben müssen Sie applogfiledas handlersfür Ihre Anwendung hinzufügen

'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        'APPNAME': {
            'handlers': ['applogfile',],
            'level': 'DEBUG',
        },
    }

In diesem Beispiel werden Ihre Protokolle in Ihrem Django-Stammverzeichnis in einer Datei mit dem Namen abgelegt APPNAME.log

Andy
quelle
4
logger = logging.getLogger('APPNAME') in diesem Fall tun
Bob Yoplait
Sie müssen diese Zeile zu jeder hinzufügenviews.py
Baschdl
30

Fügen Sie Ihrem hinzu settings.py:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

Und es wird eine Datei erstellt, die debug.logim Stammverzeichnis Ihres aufgerufen wird . https://docs.djangoproject.com/de/1.10/topics/logging/

chezwhite
quelle
6
Unter Apache2 versucht wsgi, eine Datei in zu erstellen /var/www/debug.log. Dadurch werden zwei separate Dateien erstellt, wenn sich Ihr Django-Projekt außerhalb des /var/www/Verzeichnisses befindet. Bitte verwenden Sie 'filename': os.path.join(BASE_DIR, 'debug.log'),stattdessen.
Suraj
Akzeptierte Antwort hat bei mir nicht funktioniert. Dies funktioniert auf Django 2!
caravana_942
11

Richten Sie https://docs.djangoproject.com/de/dev/topics/logging/ ein, und diese Fehler werden dann wiedergegeben, wo Sie sie anzeigen. Standardmäßig neigen sie dazu, im Unkraut zu verschwinden, daher beginne ich immer mit einem guten Protokollierungssetup vor allem anderen.

Hier ist ein wirklich gutes Beispiel für eine Grundeinstellung: https://ian.pizza/b/2013/04/16/getting-started-with-django-logging-in-5-minutes/

Bearbeiten: Der neue Link wird verschoben zu: https://github.com/ianalexander/ianalexander/blob/master/content/blog/getting-started-with-django-logging-in-5-minutes.html

Slumtrimpet
quelle
1
Beachten Sie, dass Ian umbenannt seine Domäne ian.pizza, also hier der tatsächliche Link: ian.pizza/b/2013/04/16/...
Jan