2011-04-22 11 views
6

Acabo de instalar django-sentry, y capta excepciones muy bien. Sin embargo, las llamadas a logger.warning y logger.error no se guardan en Sentry por algún motivo. aplicacióndjango-sentry no registra advertencias, errores, etc.

Sentry:

import logging 
from sentry.client.handlers import SentryHandler 

logger = logging.getLogger() 
# ensure we havent already registered the handler 
if SentryHandler not in map(lambda x: x.__class__, logger.handlers): 
    logger.addHandler(SentryHandler()) 
# Add StreamHandler to sentry's default so you can catch missed exceptions 
logger = logging.getLogger('sentry.errors') 
logger.propagate = False 
logger.addHandler(logging.StreamHandler()) 

registrador de llamada:

logger.warning("Category is not an integer", exc_info=sys.exc_info(), extra={'url': request.build_absolute_uri()}) 

¿Alguna idea? Gracias!

+0

¿Alguna actualización sobre esto? Tengo un problema similar, excepto que el registro de Sentry funciona bien en mi servidor de desarrollo pero no en mi servidor de producción. Mi producción tiene exactamente los mismos síntomas enumerados anteriormente. –

+0

¿Dónde obtiene el registrador para guardar la advertencia y cuando se agrega el controlador Sentry se ejecuta? Porque no se puede ejecutar en producción si lo usa en manage.py, por ejemplo. – Alerion

+0

Agrego el registrador Sentry justo antes de registrar la advertencia, así que estoy seguro de que se está ejecutando. Sin embargo, no sé por qué funcionaría en mi servidor de desarrollo y no en mi servidor de producción. –

Respuesta

3

intenta agregar:

logger.setLevel (logging.DEBUG)

después de la logging.getlogger, funciona para mí en env dev.

+0

Gracias por su respuesta. Desafortunadamente eso no funcionó para mí. 404s y 500s, así como otras excepciones, se graban bien ... ¿Alguna otra idea? ¡Gracias! – rabbid

+0

Una pequeña actualización. No solo eso no funcionó, esa línea de código realmente mata a mi servidor de desarrollo Django. Cuando lo comento, las cosas funcionan bien de nuevo. Loca. – rabbid

0

Puede agregar FileHandler al registrador 'sentry.errors' y comprobar si contiene algún error en la producción. Pero realmente stdout debe escribirse en los registros del servidor. Puede verificar esto

3

Adjuntará el controlador de secuencia de centinela al logging.getLogger('sentry.errors'). Eso significa que los registros de sentry.errors o inferiores usarán ese controlador de flujo centinela.

Pero los registros a 'my_app.something' no terminan allí! Entonces, te faltan casi todos los mensajes de registro.

Solución: conecte el controlador de flujo al registrador de raíz: logging.getLogger('').

Cuestiones relacionadas