2016-04-01 9 views
0

tutarsız davranıyorPython günlük düzeylerini aşağıdaki kod benim hata ayıklama mesajı üretmez neden anlayamıyorum

import logging 

l = logging.getLogger() 
l.setLevel(logging.DEBUG) 
l.debug("Debug Mess!") 
l.error(l.getEffectiveLevel()) 

ederken sonra bu satırı eklediğinizde ithalat:

DEBUG:root:Debug Mess! 
ERROR:root:10 
: logging.debug("Start...")

import logging 

logging.debug("Start...") 
l = logging.getLogger() 
l.setLevel(logging.DEBUG) 
l.debug("Debug Mess!") 
l.error(l.getEffectiveLevel()) 

o çıkışı takip üretir

, "Başlat ..." gösterilmese bile, günlüğe kaydetmeye başlar. Niye ya?

Python 3.5'de. Teşekkürler

cevap

2

En üst düzey logging.debug(..) numaralı çağrı, hiçbir işleyici henüz kök günlüğü üzerinde yapılandırılmadıysa sizin için logging.basicConfig() function numaralı telefonu çağırır. logging.getLogger().debug() çağrısı kullanarak çağrı değil tetiği yaptığı için üzerine çıktı göstermek için hiçbir işleyicileri olduğundan

, herhangi çıktı görmüyorum.

Python logger 3 sürümü günlüğü yapılandırması var olduğunda kullanılan bir logging.lastResort handler, var, ancak bu işleyici size ERROR seviye iletisini gördüğünüzde neden olan, yukarı sadece gösteri seviyesinin WARNING iletilerine ve ( 10) yapılandırılır

STDERR'e basıldı, ancak DEBUG seviye mesajınızı değil. Python 2'de, mesajını alırsınız. Kaydedici "root" için hiçbir işleyici bulunamadı, sadece bir kez giriş yapmak için ilk kez girişimde bulunuldu. Ancak lastResort işleyicisine güvenmem; bunun yerine, günlük hiyerarşinizi kendi ihtiyaçlarınız için yapılandırılmış iyi bir işleyici ile doğru şekilde yapılandırın.

Ya kök kaydedici bir işleyici ekleyin elle kendin logging.basicConfig() arayın veya:

l = logging.getLogger() 
l.addHandler(logging.StreamHandler()) 

yukarıdaki temelde başka argümanlarla bir logging.basicConfig() araması olarak aynı şeyi yapar. StreamHandler(), bu şekilde STDERR'ye günlükler oluşturdu ve mesaj seviyesini daha fazla filtrelemedi. Bir logging.basicConfig() aramasının sizin için günlük seviyesini de ayarlayabileceğini unutmayın. debug < info < warning < error < fatal amacıyla:

+0

henüz modülü withing günlükleri ile unittest sahip olabilmek arayan gelen günlük düzeyinin devralmak için en iyi yöntem nedir? –

0

kök kaydedicisi (varsayılan logger, üst düzey) ve diğer tüm Logger varsayılan günlük düzeyi her 5 günlük düzeylerinde warning (sipariş 3) 'dir.

ilk logging.debug('starting...') de Yani, kod şu şekilde debug kök günlük düzeyini ayarlamalarına yok ve starting... çıktı alınamıyor.

import logging 
logging.basicConfig(level=logging.DEBUG) 
logging.debug('starting...') 

see python logging HOW TO for detail

İlgili konular