2016-11-21 3 views
0

Das Ausführen von python manage.py runserver wird Djangos Entwicklungsserver initiieren und alle Protokolle werden auf die Konsole gedruckt.Django "./manage.py runserver" Protokoll in Datei statt Konsole

Ich muss die Protokolle in eine django.log Datei anstelle der Konsole schreiben.

Django logging documentation ist gut, aber ich kann nicht scheinen, die Protokollierung zu konfigurieren, um das gleiche Protokoll wie python manage.py runserver zu loggen.

Frage: Wie kann ich alles von ./manage.py runserver in eine Datei protokollieren?

Antwort

3

Es ist eine einfache Linux-Umleitung, so dass es in etwa so aussehen sollte:

python manage.py runserver 0.0.0.0:8080 >> log.log 2>&1 

Bitte beachten Sie, dass ich 8080 als lokalen Port eingerichtet haben, sollten Sie es Ihrem Projekt ändern sich entsprechend.

PS: Diese Methode (manage runserver) sollte nur für die Entwicklung verwendet werden, nicht für die Bereitstellung.

+1

Syntax für die Verwendung von Docker: CMD [ "/ bin/sh", "c", „/manage.py runserver 0.0.0.0:3000> > log.log 2> & 1 "] – Vingtoft

1

Dies sind einige Beispieleinstellungen, die sicherstellen sollten, dass Protokolle sowohl in die Konsole als auch in die Datei geschrieben werden. Sie können dies in Ihrem dev-Einstellungen hinzufügen/ändern:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': True, 
    'formatters': { 
     'standard': { 
      'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s' 
     }, 
    }, 
    'handlers': { 
     # this is what you see in runserver console 
     'console': { 
      'class': 'logging.StreamHandler', 
      'formatter': 'standard', 
     }, 
     # this handler logs to file 
     #▼▼▼▼ this is just a name so loggers can reference it 
     'file': { 
      'class': 'logging.FileHandler', 
      # choose file location of your liking 
      'filename': os.path.normpath(os.path.join(BASE_DIR, '../../logs/django.log')), 
      'formatter': 'standard' 
     }, 
    }, 
    'loggers': { 
     # django logger 
     'django': { 
      # log to console and file handlers 
      'handlers': ['console', 'file'], 
      'level': os.getenv('DJANGO_LOG_LEVEL', 'ERROR'), # choose verbosity 
     }, 
    }, 
} 
+0

Dadurch wird nur die Protokollierung auf Fehlerprotokollebene ausgegeben. Das Ergebnis ist daher nicht mit dem Befehl runserver vergleichbar. Ich weiß nicht, welche Protokollstufe der runserver Befehl verwendet, bitte lassen Sie es mich wissen, wenn Sie es herausfinden :) – Vingtoft