2013-07-08 27 views
10

StreamHandler günlüğü python'unu kullanmak istiyorum. i denedim ne Python: logging.streamhandler günlükleri stdout'a göndermiyor

import logging 
import sys 
mylogger = logging.getLogger("mylogger") 
h1 = logging.StreamHandler(stream=sys.stdout) 
h1.setLevel(logging.DEBUG) 

mylogger.addHandler(h1) 

# now trying to log with the created logger 
mylogger.debug("abcd") # <no output> 
mylogger.info("abcd") # <no output> 
mylogger.warn("abcd") # abcd 

i şey eksik, nedir? Ya da yanlış mı yapıyorsun? Neden STOKTA BİLGİ ve DEBUG seviyesi günlükleri gelmiyor?

cevap

16

Sen kaydedicisi düzeyini, işleyici sadece düzeyini ayarlamak zorunda: Burada

mylogger.setLevel(logging.DEBUG) 

Gördüğünüz günlüğü iş akışı, güzel bir grafik olduğunu logger ve işleyici ya günlük düzeyi için kontrol edin:

http://docs.python.org/2/howto/logging.html#logging-flow

varsayılan logLevel Eğer DEBUG için işleyici düzeyini ayarlamak yüzden bile WARNING olduğunu, mesaj almazsınız aracılığıyla, sizin logger onu bastırır (aynı zamanda varsayılan olarak WARNING). Bu arada

, sen Formatter ile bazı temel biçimlendirme yapabilirsiniz: //docs.python:

import logging 
import sys 

mylogger = logging.getLogger("mylogger") 

formatter = logging.Formatter('[%(levelname)s] %(message)s') 

handler = logging.StreamHandler(stream=sys.stdout) 
handler.setFormatter(formatter) 
handler.setLevel(logging.DEBUG) 

mylogger.addHandler(handler) 
mylogger.setLevel(logging.DEBUG) 

mylogger.debug("This is a debug message.") 
mylogger.info("Some info message.") 
mylogger.warning("A warning.") 

[DEBUG] This is a debug message. 
[INFO] Some info message. 
[WARNING] A warning. 
+0

Ben bazı temel belgeler, http takip ediyordu çıktı üretmesi size verecek. org/2/howto/logging.html # logging-advanced-eğitici Doc, işleyicide setLevel yazdığını söylüyor. Bu belge yanlış mı? –

+2

Hayır, yanlış değil, http://docs.python.org/2/howto/logging.html#logging-flow dosyasında gördüğünüz gibi, kaydedici seviyeyi kontrol ettikten sonra kaydediciyi günlük sahibine iletir. Bu yüzden, logger seviyesi "WARN" ve "DEBUG" mesajı geliyorsa, hiçbir şey geçmez. Bir mesaj geçerse, kaydedici, bir "filtre" kayıt tipine sahip olan işleyiciye teslim eder. – tamasgal

+0

İşleyici seviyesini ayarladığımda neden logger seviyesini ayarlamam gerekiyor? Neden iki kez ayarlanıyor? Bu gereksiz görünüyor. – ospider