2016-05-04 38 views
0

我想要計算已經命中logger.infologger.error的次數。 我打算覆蓋日誌的默認方法錯誤,任何人都可以告訴我該怎麼做? 需要幫助來覆蓋錯誤方法,以便每次代碼命中時計數值和遞增計數器。如何覆蓋日誌記錄模塊的方法

+0

你能分享你試過的任何代碼:

根據要求與示例代碼更新?你可以從添加自己的'MyLogger'開始,這個'MyLogger'包裝python的logger實現並添加計數器。 – yelsayed

回答

3

您可以首先通過從logging.Logger派生出實現您自己的記錄器類,在其中覆蓋您的目標方法。然後通過使用logging.setLoggerClass將記錄器類傳遞到日誌記錄系統。使用此設置,logging.getLogger實例化的記錄器對象將成爲您的類。

import logging 
import threading 

class MyLogger(logging.Logger): 

    def __init__(self, name, level = logging.NOTSET): 
     self._count = 0 
     self._countLock = threading.Lock()  

     return super(MyLogger, self).__init__(name, level)   

    @property 
    def warnCount(self): 
     return self._count 

    def warning(self, msg, *args, **kwargs): 
     self._countLock.acquire() 
     self._count += 1 
     self._countLock.release() 

     return super(MyLogger, self).warning(msg, *args, **kwargs) 

logging.setLoggerClass(MyLogger) 
logging.basicConfig() 


'''testing below''' 

logger = logging.getLogger('loggerX') 
assert isinstance(logger, MyLogger) 

logger.warning('1st warning') 
logger.warning('2nd warning') 
print logger.warnCount 
+0

非常感謝您的想法。我嘗試過,但沒有做到這一點。我正在學習python和新的。 你能否給我這個雷士的代碼。這將是非常有用的。 – LoveforPython

+0

這段代碼有意義嗎? ! #在/ usr/bin中/ Python的 進口記錄 QUERY_COUNT = 0 original_function = logging.error._obj 類MyLogger: 高清_obj(個體經營,甲基,*參數): 康恩= self.getConnection () VAL =甲基(康涅狄格州,*參數) self.releaseConnection(康涅狄格州) 返回VAL DEF包裝物(自,甲基,*參數): 全球QUERY_COUNT QUERY_COUNT + = 1個 返回original_function(個體,甲基,* args) logging.error._obj =包裝 – LoveforPython

+0

@PrashantRathi,請檢查我的更新回答示例代碼 –

相關問題