2016-11-09 65 views
0

我剛開始使用Python,我很努力地使用Logger。我有兩個python文件:app.py和liba.py.我想在app.py中設置日誌記錄,並將它用於liba.py(和另一個庫)。你有什麼好的想法,或者你能分享任何參考嗎?Python如何在多個python文件中設置全局記錄器設置?

文件結構

entry.py 
lib/liba.py 

app.py

#! /usr/bin/env python3 

import logging 
logger = logging.getLogger(__name__) 

from lib import liba 

handler = logging.FileHandler('/tmp/app.log', 'a+') 
logger.addHandler(handler) 
logger.warn('sample') 

liba.out() 

LIB/liba.py

#! /usr/bin/env python3 

import logging 
logger = logging.getLogger(__name__) 

def out(): 
    logger.warn('liba') 

執行python

$ python3 app.py 
liba 

app.py輸出日誌到日誌文件。 liba.py不會將日誌輸出到文件中。我想將日誌保存在同一個文件中。

回答

0

不喜歡這樣:

app.py

#! /usr/bin/env python3 

import logging 
logger = logging.getLogger() 
handler = logging.FileHandler('/tmp/app.log', 'a+') 
logger.addHandler(handler) 

logger.warn('sample') 

from lib import liba 

liba.out() 

的lib/liba.py

#! /usr/bin/env python3 

import logging  
def out(): 
    logging.warn('liba') 

你並不需要實例記錄,除非你想配置處理器,你只在你的主要腳本中做。然後所有日誌記錄都將轉到根記錄器,這就是您在實例化時沒有具體名稱logging.getLogger()。我喜歡以這種方式使用它,因爲您無需在所有模塊中匹配名稱以使其正常工作。在您的模塊中,您只需使用logging.warn('blabla')發送日誌消息。您還需要確保在調用logging.warn之前定義所有處理程序,否則某些默認處理程序將取代它。