2015-11-04 42 views
0

我在發現logging,我想將它集成到一個類中以供外部使用。這意味着,用戶可以選擇忽略日誌記錄功能或將處理程序綁定到它。如何在Python中將記錄器添加到模塊中?

我現在有這在我的測試模塊:

import logging 
class Test: 
    def __init__(self): 
     self.logger = logging.getlogger(__module__ + '.Test') 

    def hello(self): 
     self.logger.warn('Hello World!') 


test = Test() 
test.hello() 

有了這個,我得到的錯誤

No handlers could be found for logger 

我恰恰不想綁定一個處理程序,這個記錄器,否則我可能會覆蓋父母的選擇。我認爲默認處理程序是Nullhandler

什麼是一個日誌記錄功能集成一個獨立的模塊內的正確模式?

當然一個解決辦法是檢查,如果沒有處理程序綁定到它:

if not len(self.logger): l.addHandler(logging.NullHandler()) 
+0

這不可能是真正的代碼。 「測試」沒有「警告」屬性。 'self.warn('Hello World!')'會失敗。 –

+0

@PeterWood我的錯誤:( – nowox

+0

我創建了日誌模塊,提供我自己的getLogger功能檢查「如果不logger.handlers」,並增加了一個控制檯處理器的封裝模塊。所以,你所建議的解決方案應該工作。 –

回答

1

這是我在我的項目之一使用。

def get_logger(log_level,log_name='YourNameGoesHere'): 
    logger = logging.getLogger(log_name) 
    if not logger.handlers: 
     logger.setLevel(log_level) 
     ch = logging.StreamHandler() 
     ch.setLevel(log_level) 
     ch.setFormatter(logging.Formatter(
      '%(asctime)s - %(name)s - %(levelname)s - %(message)s' 
     )) 
     logger.addHandler(ch) 
     logger.propagate = 0 
    return logger