2011-06-27 66 views
1

我使用短語!Silent來確定日誌記錄的保存位置。
如果日誌記錄消息在字符串開頭包含!Silent,我的Filter子類在StreamHandler中拒絕此消息。但消息傳遞給其他處理程序,如FileHandlerMemoryHandler,並以!Silent短語傳遞。Python日誌記錄 - 全局應用格式化程序

我創建了簡單的Formatter子類去掉這個短語,包括字符串開頭的白色字符,但是我在將這個格式化程序應用到處理程序時遇到了問題。

在我的應用程序的許多地方,我修改根記錄器處理程序,創建,添加和刪除它。這些處理程序中的每一個都應該有我的Formatter子類,但手動添加到每個子程序都不太舒服。

我正在尋找將全局Formatter類應用到根日誌記錄器的方法,或者覆蓋根日誌記錄器addHandler將過濾器添加到處理器之前將其添加到根記錄器的方法。或者更簡單的方式,如果存在。

回答

1

老實說,我不確定我完全理解你的問題,所以請原諒我,如果我的回答不是你正在尋找的......但是,而不是對每個處理程序的輸入應用過濾器,我會添加一個屬性到您傳遞的unicode(或字符串)對象。喜歡的東西:

>>> class LogMsg(unicode): 
...  def __new__(cls, string_): 
...   if string_[:7] == '!Silent': 
...    cls.nolog = True 
...    return super(LogMsg, cls).__new__(cls, string_[7:]) 
...   else: 
...    cls.nolog = False 
...    return super(LogMsg, cls).__new__(cls, string_) 
... 
>>> a = LogMsg('The hard drive is on fire!') 
>>> a 
u'The hard drive is on fire!' 
>>> a.nolog 
False 
>>> b = LogMsg('!SilentMy feet stink! :(') 
>>> b 
u'My feet stink! :(' 
>>> b.nolog 
True 

這種方式,你可以簡單地繞過「串」,從來沒有顯示!Silent但是有一個隱藏的標誌(nolog),您可以測試只在需要的情況下。

HTH, /mac

相關問題