2016-05-02 10 views
0

Ich habe versucht, die Anmeldung in Django richtig für die Entwicklung zu konfigurieren, so kann ich es nur in der Konsole für jetzt sehen, aber wenn ich vom Drucken zum Protokollieren dann die Ausgabe einfach nicht erscheint.Django Logging - für lokale Entwicklung

django lokalen Einstellungen Setup:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse', 
     }, 
     'require_debug_true': { 
      '()': 'django.utils.log.RequireDebugTrue', 
     }, 
    }, 
    'handlers': { 
     'console': { 
      'level': 'DEBUG', 
      'filters': ['require_debug_true'], 
      'class': 'logging.StreamHandler', 
      'stream': sys.stdout 

     }, 
    }, 
    'loggers': { 
     'myapp.management': { 
      'handlers': [ 
       # 'mail_admins', 
       # 'syslog', 
       'console'], 
      'level': 'DEBUG', 
     }, 
     'django': { 
      'handlers': [ 
       # 'mail_admins', 
       # 'syslog', 
       'console'], 
      'level': 'INFO', 
     }, 
    } 
} 

Dann wird in einem django-Management-Befehl:

import logging 

logger = logging.getLogger(__name__) 

des Loggers Mit über:

def collect_data(self, url, method, payload=None): 
     response = getattr(requests, method)(url=url json=payload, headers=self.headers) 
     if response.status_code == 200: 
      logging.debug('{}'.format(response.json()) 
      # print('{}'.format(response.json())) 
      return response.json() 
     else: 
      logging.warning('{}'.format(response.raise_for_status())) 
      # print('{}'.format(response.raise_for_status())) 
      return response.raise_for_status() 

Antwort

0

Wenn Sie einen Test benannte Datei. py in Ihrem Management-Ordner, würden Sie es so konfigurieren:

'testproject.management.commands.test': { 
      'handlers': ['my_handler'], 
      'level': 'INFO', 
      'propagate': True 
     }, 

Die Importe innerhalb test.py sind in Ordnung so:

import logging 

logger = logging.getLogger(__name__) 

Haben Sie nicht genau es richtig, diesen Moment getestet, aber dies aus einem Projekt von mir ist, wo ich einen Logger innen mit ein Management-Befehl und es hat gut funktioniert.

+0

Dank bizarrerweise kann ich einige Ausgaben mit 'logging.info ('some string')' an einigen Stellen in meinem Management-Befehlsskript bekommen, aber nicht in anderen. An den Stellen, an denen es nicht funktioniert, funktioniert ein 'print ('some string')' direkt neben der Protokollierung. Ich bekomme keine Fehler, deshalb habe ich keine Ahnung, warum es an manchen Orten funktioniert, aber nicht an anderen? – Yunti

+0

Können Sie die gesamte Datei posten? – Nirri