2010-04-10 8 views
37

Me gustaría imprimir mensajes de depuración en mi aplicación django en diferentes puntos de una función de vista. Los documentos para el django-debug-toolbar dicen que usa la compilación en el registro de Python, pero no puedo encontrar más información que eso. Realmente no quiero iniciar sesión en un archivo sino en el panel de información en la barra de herramientas. ¿Como funciona esto?¿Cómo uso el registro en la barra de herramientas de depuración Django?

Respuesta

43

Simplemente utiliza los métodos logging module y DjDT los interceptará y mostrará en el Panel de registro.

import logging 

logging.debug('Debug Message') 

if some_error: 
    logging.error('Error Message') 
8

La conexión directa al registrador de raíz, como se menciona en @ jonwd7, por lo general no se recomienda. En general estoy siguiendo este patrón:

import logging 
logger = logging.getLogger(__name__) 
del logging # To prevent accidentally using it 

... 

logger.debug("Some message") 

Esto le permite tener mucho grano más fino control sobre los mensajes de registro hacen y no muestran. Desafortunadamente, al utilizarlo de esta forma, la barra de herramientas de depuración de django no capturará ningún mensaje de registro a menos que especifique una configuración de registro específica. Aquí es la más simple que podía llegar a:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'incremental': True, 
    'root': { 
     'level': 'DEBUG', 
    }, 
} 

Configuración "disable_existing_loggers" "incrementales" y son importantes por lo que no está deshabilitando el manejador de la barra de herramientas adjunto al registrador de la raíz. Todo lo que quiere hacer es establecer el nivel de registro del registrador de raíz en "DEPURAR". También puede usar la entrada "registradores" para establecer niveles para registradores específicos. Simplemente omita la sección "Controladores" y configure "propagar": Verdadero para que sean capturados por el manejador DjDT.

+1

Gracias por entrar en detalles con el registrador de raíz. Esa es información que otras respuestas carecen. – jnns

+1

la parte del montaje me ayudó, ¡gracias! Todavía un buen consejo en 2016 – Jeff

0

Si tiene una configuración de REGISTRO existente, y no quiere estropearla cambiando a 'incremental', necesitará volver a agregar el registro de DjDT como controlador y luego agregarlo al lista de controladores de root logger.

from debug_toolbar.panels.logging import collector # needed for handler constructor below 
LOGGING = { 
    # existing options, formatters, loggers, etc 
    handlers = { 
     # existing handlers 
     'djdt_log': { 
      'level': 'DEBUG', 
      'class': 'debug_toolbar.panels.logging.ThreadTrackingHandler', 
      'collector': collector, 
     }, 
    }, 
    'root': { 
     'level': 'DEBUG', 
     'handlers': ['djdt_log'], 
    }, 
} 

Si hay una forma más clara de hacerlo, me encantaría verla.

Cuestiones relacionadas