2013-04-09 133 views
1

我想了解python日誌記錄的工作方式。python日誌記錄和處理程序的使用

我知道這是一個適用於整個正在運行的解釋器的單例實例。

我有這樣的功能:

def setup_logging(options=None): 
    '''setup the logger and return it''' 
    logging.basicConfig(level=logging.WARNING, 
         format='%(levelname)s: %(message)s', 
         filename='/tmp/pluser.log') 

    logger = logging.getLogger('pluser') 
    console = logging.StreamHandler() 
    console.setLevel(logging.DEBUG) 
    print(console.level) 
    logger.addHandler(console) 
    return logger 

,我稱之爲使用這樣的:

console = setup_logging(options) 

    console.debug('Initializing database') 
    connect_to_db() 
    console.debug('Database initialized') 

(這是做更多的日誌記錄到不同的地方準備)現在

,「控制檯「是一個」logging.Logger「實例。 它有一個StreamHandler。該流處理程序的級別爲10(即logging.DEBUG)。 但是,StreamHandler似乎沒有得到消息,因爲事物只能在console.warning,error或critical中打印到控制檯(應該有stderr和stdout)。

因此,我明顯錯過了記錄器與系統或StreamHandler進行交互的方式。

我的目標是當StreamHandler的級別調試時,所有內容都打印到控制檯,但我也想知道爲什麼這不起作用。

+0

我添加了「logging.StreamHandler(sys.stdout),然後它在連續打印3次,如果我做console.warning,但仍然不打印在調試。 – qkslvrwolf 2013-04-09 16:47:23

回答

1

好了,這是在這裏找到答案:logging setLevel, how it works

總結:您添加處理程序需要記錄器是在您的處理程序或更低的水平,否則以前被傳遞到記錄器拒絕郵件處理程序。

所以我必須做的是將我的basicConfig默認設置爲DEBUG,而不是WARNING。如果我然後想添加另一個處理程序,只處理警告和以上,我會這樣做,而不是保持默認。

相關問題