2016-05-04 3 views
0

Я хочу посчитать количество раз, когда logger.info и logger.error был поражен. Я планирую переопределить ошибку метода метода по умолчанию, может ли кто-нибудь предложить мне, как это сделать? Нужна помощь в переопределении метода ошибок, чтобы каждый раз, когда код попадал в него, подсчитывал счетчик значений и приращений.Как переопределить метод модуля каротажа

+0

Можете ли вы поделиться какой-либо код, который вы пробовали? Вы можете начать с добавления собственного 'MyLogger', который обертывает реализацию регистратора python и добавляет счетчики. – 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/бен/питон импорта каротаж QUERY_COUNT = 0 original_function = logging.error._obj класс MyLogger: Защиту _obj (самость, мет, * арг): сопп = self.getConnection() вал = мет (Conn, * арг) self.releaseConnection (Conn) возвращение Вэл защиту обертка (я, мет, * арг): глобальная QUERY_COUNT QUERY_COUNT + = 1 возвращение original_function (самость, мет , * args) logging.error._obj = wrapper – LoveforPython

+0

@PrashantRathi, пожалуйста, уточните мой обновленный ответ для примера кода –

Смежные вопросы