2015-07-06 74 views
4

我想在我的python代碼執行的運行時刪除StreamHandler。Python:日誌記錄:刪除StreamHandler

if (False == consoleOutput):                                         
    lhStdout = log.handlers[0] # stdout is the only handler initially                              
    log.removeHandler(lhStdout) 

這工作正常。但我不喜歡我們假設stdout是處理程序數組中的第一個處理程序。有沒有辦法查詢處理程序類來找到它是哪種類型?事情是這樣的

for handler in log.handlers 
    if (handler.type == StreamHandler()) 
     <...> 

回答

1

什麼你要找的拼寫:if isinstance(handler, StreamHandler): - 但我真的很想知道爲什麼想要做的,而不是使用明智的解決方案這樣的事情(即未配置StreamHandler爲你的記錄器...)。

+0

謝謝,它的工作! 在你的問題上,爲什麼不使用StreamHandler? IO的原因?或更便宜的替代品(使用Filehandler,並做尾巴?) –

+0

我的問題不是「爲什麼不使用StreamHandler」,但爲什麼你會讓你的代碼從記錄器的配置中刪除一些東西。如果是應用程序代碼,那麼_your_代碼負責配置記錄器,並且您只需在配置中不使用StreamHandler。如果它是庫代碼,那麼BY BY MEAN *不要*混淆記錄器的配置,這是應用程序的代碼責任,而不是你的。 TL; DR:如果你想從記錄器中刪除一個處理程序,那麼你沒有使用正確的方式記錄日期。 –

+0

*「如果你想從記錄器中刪除一個處理程序,那麼你沒有用正確的方式記錄」*不幸的是,這不是真的。一些庫向它們的記錄器添加一個流處理程序,並且調用應用程序可能想要將其移除。 – Kylotan