lo hice un poco de búsqueda, pero me pregunto si alguien tiene un fragmento de una configuración de registro para llegar a Django que acaba de emitir un seguimiento de la pila a la salida estándar (para que pueda verlo en la ventana de Terminal) cuando encuentra un error durante una solicitud. Esto es específicamente para el desarrollo/depuración local y principalmente para cuando hago solicitudes de publicación AJAX y tengo que mirar el HTML en Firebug para descubrir en qué línea ocurrió el error.Imprimir un seguimiento de pila a la salida estándar de errores en Django durante el uso de manage.py runserver
Respuesta
Se puede crear una pieza de middleware para hacer esto. He aquí un fragmento modificado que estoy usando para un proyecto:
class ExceptionLoggingMiddleware(object):
def process_exception(self, request, exception):
import traceback
print traceback.format_exc()
lugar este controlador en su parte middleware de la configuración de Django.
Subclase WSGI controlador, haga lo que desee con traceback en su handle_uncaught_exception
definido, y use su WSGIHandler en lugar del proporcionado por django durante la implementación.
import traceback
from django.core.handlers.wsgi import WSGIHandler
class MyWSGIHandler(WSGIHandler):
"""WSGI Handler which prints traceback to stderr"""
def handle_uncaught_exception(self, request, resolver, exc_info):
traceback.print_tb(exc_info[2], file=sys.stderr)
return super(WSGIHandler, self).handle_uncaught_exception(request, resolver, exc_info)
Se utiliza con Apache/mod_wsgi, esto debe escribir el rastreo, en el registro de errores de Apache
Otro método es con TALA. En concreto se obtiene una StackTrace cuando se ejecuta ./manage.py runserver
añadiendo lo siguiente a la settings.py archivo:
LOGGING = {
'version': 1,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.request': {
'handlers':['console'],
'propagate': True,
'level':'DEBUG',
}
},
}
Esta sintaxis viene de la documentación de Django Configuring Logging y puede ser modificado adicionalmente para aumentar o disminuir la cantidad de consola- explotación florestal.
También las 5XX respuestas son criados como mensajes de error y 4XX respuestas son criados como mensajes de advertencia.
Tenga en cuenta que esta pregunta & respuesta tiene un 2013 duplicado here.
Este debería ser el método preferido en mi opinión. Usted tiene mucho más control sobre qué registradores desea utilizar, qué desea registrar, etc. – Andre
que tenía un problema similar, pero la opción de middleware no me ayuda. La razón es que estoy usando django-jsonview 0.4.3, que proporciona un decorador que convierte un diccionario en una respuesta http json válida, incluso cuando la función decorada falla, por lo que nunca se llama al método process_exception middleware. He comprobado el código de este decorador y parece que se trata de registrar el error de hacer esto:
...
except Exception as e:
logger = logging.getLogger('django.request')
logger.exception(unicode(e))
Sin embargo, no sé por qué, esto no está funcionando y no se registra nada en mi consola bash. Debería descubrir por qué sucede esto. Mientras tanto, estoy usando un decorador extra:
def log_errors(func):
if not settings.DEBUG:
return func
def wrapper(request, *args, **kwargs):
try:
return func(request, *args, **kwargs)
except:
print traceback.format_exc()
return wrapper
Luego, en todos mis puntos de vista JSON:
@json_view
@log_errors
def my_view(request):
....
que suelen utilizar esto:
except Exception,e:
# Get line
trace=traceback.extract_tb(sys.exc_info()[2])
# Add the event to the log
output ="Error in the server: %s.\n" % (e)
output+="\tTraceback is:\n"
for (file,linenumber,affected,line) in trace:
output+="\t> Error at function %s\n" % (affected)
output+="\t At: %s:%s\n" % (file,linenumber)
output+="\t Source: %s\n" % (line)
output+="\t> Exception: %s\n" % (e)
Luego uso "de salida "para todo lo que necesita: imprimir a la salida estándar, envíe un correo electrónico, etc ...
Es de San rango nadie mencionó la configuración DEBUG_PROPAGATE_EXCEPTIONS
.No es para producción, pero es muy fácil de usar en entornos de prueba/depuración. Simplemente agregue a settings.py
:
DEBUG_PROPAGATE_EXCEPTIONS = True
Exactamente esta parece la respuesta más adecuada :) – sudhanshu
+1 por lo que vale la pena, después de un par de horas depurando un problema DRF y sin más pruebas/opciones para probar, literalmente salvaste mi día ... – jliendo
Esto definitivamente debería ser la respuesta aceptada, ¡muchas gracias! –
- 1. Django manage.py runserver verbosidad
- 2. manage.py runserver
- 3. Imprimir seguimiento de pila en la ventana de salida
- 4. PyCharm manage.py runserver error
- 5. manage.py runserver Error: [Errno 10013]
- 6. Django: Anular depuración = Verdadero desde el comando manage.py runserver
- 7. ¿Cómo imprimir el seguimiento completo de pila en la excepción?
- 8. Imprimir el seguimiento de pila en C++ (MSVC)?
- 9. Imprimir el seguimiento de la pila de una excepción
- 10. Python: imprimir un archivo de salida estándar
- 11. Imprimir la información de seguimiento de la pila de C#
- 12. Cómo salida de un seguimiento de pila profunda en Node.js?
- 13. ¿Cómo imprimir un seguimiento de pila en Node.js?
- 14. Imprimir un seguimiento de pila de otro hilo
- 15. ¿Firebug no muestra el seguimiento de la pila por errores?
- 16. ¿Deshabilitar el registro durante la prueba manage.py?
- 17. Redirigir la salida de django manage.py (en Windows) a un archivo de texto
- 18. errores de registro con seguimiento de pila en javascript
- 19. Java envía el seguimiento de pila a un flujo de salida diferente
- 20. salida de entero a la salida estándar en Haskell
- 21. ¿Hay alguna forma de imprimir el seguimiento de pila a pedido?
- 22. cómo imprimir seguimiento de la pila en el archivo de registro
- 23. ¿Hay alguna manera de imprimir un proyecto de ActionScript 3 (Flex/AIR) a la salida estándar?
- 24. Cómo obtener el seguimiento de la pila de un hilo
- 25. Salida de la salida estándar a un archivo y viceversa
- 26. Django runserver permanent
- 27. Encontrar el seguimiento de la pila real de Java desde un seguimiento de la pila de JavaScript
- 28. ¿Cómo puedo imprimir el seguimiento de la pila en tiempo de ejecución de un proceso de Ruby 1.9?
- 29. ¿Cómo puedo imprimir el seguimiento completo de la pila con GlassFish?
- 30. Cómo imprimir la traza de pila de StackOverflowException
"Terminal Window"? ¿Estás ejecutando 'django-admin.py runserver'? –
Sí, 'manage.py runserver' localmente, pero esto sería útil también para la producción, aunque allí recibo correos electrónicos, por lo que no es un problema. – Bialecki
el enfoque de "producción" depende de cómo se integre con Apache, por lo que deberá proporcionar aún más detalles sobre esa configuración para asegurarse de que comprendamos. –