2013-03-28 24 views
5

numaralı dosyaya engelliyor. tie Raven into the logging setup çalışıyorum düz bir python (non-Django) projem var. Mevcut kurulum altında Raven'ın SentryHandler dosyası, StreamHandler çıktısını

, basit günlük config kullanın:

import logging 
logging.basicConfig(format='long detailed format', 
        level=logging.DEBUG) 

çıktı ardından bir günlük dosyasına yönlendirilir; Bu, ihtiyacımız olduğunda bakabileceğimiz güzel, ayrıntılı bir günlük oluşturur. logging.errorayrıca mesajda sonuç Nöbetçi sunucuya gönderilen çağırır böylece

Biz şimdi bizim şimdiki günlüğü kurulumu içine bağlayarak, Raven'ın hata günlüğü eklemek istiyorum. Aşağıdaki kodu kullanarak:

from raven import Client 
from raven.conf import setup_logging 
from raven.handlers.logging import SentryHandler 

raven = Client(environ.get('SENTRYURL', ''), site='SITE') 
setup_logging(SentryHandler(raven, level=logging.ERROR)) 

Hatalar başarıyla Sentry gönderiliyor, ama şimdi dosya çıktı yalnızca tek bir satırını alıyorum:

DEBUG: Configuring Raven for host: <DSN url> 

Diğer tüm dosya çıktı - logging.debug ila logging.error - bastırılıyor.

setup_logging satırına yorum yaparsam, dosya çıktısı alıyorum ancak Sentry hataları yok. Neyi yanlış yapıyorum?

cevap

3

Bu, bir eğik kod durumu olduğu ortaya çıktı. Bazı günlüğü-başlatıldı yeniden başlatma yürütme yolunda başka bir yerde kesmek zorunda: logging.root mevcut işleyicileri varsa bir şey yapmaz logging.basicConfig beri Ancak

logging.root.removeHandler(logging.root.handlers[0]) # Undo previous basicConfig 
logging.basicConfig(format='same long format', 
        level=logging.DEBUG) 

, bu basitçe nöbetçi işleyicisi bırakarak akışı işleyicisi kaldırıldı ve sonra basicConfig'un no-op olarak işlev görmesine neden oldu, yani StreamHandler'ımızı tamamen kaybettik. Bu satırları kaldırarak ve yalnızca bir tane basicConfig ve bir setup_logging numaralı çağrıya sahip olmak işe yaradı.

İlgili konular