2011-04-22 12 views
6

Sadece django-sentry kurdum ve istisnaları sadece iyi yakalar. Ancak, bir sebepten dolayı logger.warning ve logger.error çağrıları Sentry'ye kaydedilmiyor.django-sentry uyarıları kaydetmiyor, hatalar, vb

Nöbetçi uygulaması:

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()) 

logger çağrı:

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

Herhangi bir fikir? Teşekkürler! o dev env üzerinde benim için çalışıyor,

logger.setLevel (logging.DEBUG)

logging.getlogger sonra:

+0

Bu konuda herhangi bir güncelleme var mı? Benzer bir sorun var, Sentry logging dışında benim dev sunucumda gayet iyi çalışıyor ancak üretim sunucum değil. Benim üretimim yukarıda listelenen aynı belirtilere sahip. –

+0

Uyarı kaydetmek için kaydediciye nereden ulaşıyorsunuz ve Sentry işleyicisi eklenirken? Örneğin, manage.py'de kullanırsanız, üretimde çalıştırılamayacağından. – Alerion

+0

Uyarı kaydedilmeden hemen önce Sentry logger'ı ekliyorum, bu yüzden idam edildiğine eminim. Bununla birlikte, neden dev sunucumda çalışacağımı bilmiyorum ve üretim sunucumdan değil. –

cevap

3

eklemeyi deneyin.

+0

Cevabınız için teşekkür ederiz. Ne yazık ki bu benim için işe yaramadı. Diğer istisnaların yanı sıra 404s ve 500'ler de iyi bir şekilde kaydediliyor. Teşekkürler! – rabbid

+0

Küçük bir güncelleme. Sadece bu işe yaramadı, bu kod satırı aslında Django dev sunucumu öldürüyor. Bunu açıkladığımda, işler tekrar işe yarıyor. Çılgın. – rabbid

0

FileHandler'ı 'sentry.errors' logger'a ekleyebilir ve üretimde bir hata olup olmadığını kontrol edebilirsiniz. Ama gerçekten stdout sunucu günlüklerine yazılmalıdır. Bunu kontrol edebilirim.

3

Nöbetçi akış işleyicisini logging.getLogger('sentry.errors')'a bağlıyorsunuz. Bu, bu nöbetçi akışı işleyicisini kullanacak olan sentry.errors veya altındaki günlükleri ifade eder.

Ancak, 'my_app.something' günlüğüne kadar çıkmaz! Yani neredeyse tüm günlük mesajlarını kaçırıyorsun.

Çözüm: Akış işleyicisini kök günlüğüne iliştirin: logging.getLogger('').