2016-05-04 39 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,请检查我的更新回答示例代码 –

相关问题