2012-11-12 16 views
6

ben yapmış olmanız uyarıları almak için aşağıdaki kodu kullanmış:Logging.captureWarnings ile yakalanan uyarıları nasıl biçimlendiririm?

Bu işleri
import logging 
logging.captureWarnings(True) 
formatter = logging.Formatter('%(asctime)s\t%(levelname)s\t%(message)s') 
console_handler = logging.StreamHandler() 
console_handler.setLevel(logging.DEBUG) 
console_handler.setFormatter(formatter) 

Ancak benim günlüğü biçimlendirici uygulanmaz ve uyarılar bu gibi bakarak çıkıp:

WARNING:py.warnings:/home/joakim/.virtualenvs/masterload/local/lib/python2.7/site-packages/MySQL_python-1.2.3c1-py2.7-linux-x86_64.egg/MySQLdb/cursors.py:100: Warning: 
InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table. 

2012-11-12 18:19:44,421 INFO START updating products 

nasıl yakalanır uyarı mesajlarına benim normal biçimlendirme uygulayabilirsiniz: yerine beklenen biçimi? O günlükçüsüne senin işleyicisi eklemeniz gerekir böylece py.warnings adında bir günlükçüsüne

cevap

5

çalışıyorum, ama bunu kullanmak için günlük modülü yapılandırılmış asla:

console_handler = logging.StreamHandler() 
console_handler.setLevel(logging.DEBUG) 
console_handler.setFormatter(formatter) 

Bir günlükçüsüne bu işleyicisi eklemeniz gerekir; örneğin kök logger: Alternatif

logging.getLogger().addHandler(console_handler) 

, sadece uyarılar günlükçüsüne işleyicisi ekleyebilir; yakalanan uyarıları py.warnings kullanır captureWarnings() documentation devletler:

logging.basicConfig(format='%(asctime)s\t%(levelname)s\t%(message)s', level=logging.DEBUG) 

yukarıdaki temel yapılandırma:

logging.getLogger('py.warnings').addHandler(console_handler) 

yerine açıkça bir işleyici ve biçimlendirici oluşturmak yerine, ayrıca sadece kök logger yapılandırmak için basicConfig() çağırabilir kurduğunuz işleyici yapılandırmasının ahlaki karşılığıdır.

3

logging.captureWarnings günlükleri,:

import logging 

logging.captureWarnings(True) 
formatter = logging.Formatter('%(asctime)s\t%(levelname)s\t%(message)s') 
console_handler = logging.StreamHandler() 
console_handler.setLevel(logging.DEBUG) 
console_handler.setFormatter(formatter) 
py_warnings_logger = logging.getLogger('py.warnings') 
py_warnings_logger.addHandler(console_handler) 
0

documentation yakalama Doğru ise , uyarılar modülü tarafından yayınlanan uyarılar yönlendirilecektir söylüyor kayıt sistemi. Özellikle, bir uyarı, warnings.formatwarning() kullanılarak biçimlendirilecek ve sonuçta oluşan dize, UYARI şiddeti ile 'py.warnings' adlı bir günlükçüye kaydedilecektir.

Bu yüzden bir işleyici yarattı

# get the 'py.warnings' logger 
log = logging.getLogger('py.warnings') 
# assign the handler to it 
log.addHandler(console_handler) 
İlgili konular