gpt4 book ai didi

python - Python 日志记录的摘要计数

转载 作者:太空狗 更新时间:2023-10-30 00:04:18 26 4
gpt4 key购买 nike

在我的 Python 程序结束时,我希望能够获得通过标准 logging 记录的项目数的摘要。模块。我特别希望能够对每个指定名称(可能还有它的子名称)进行计数。例如。如果我有:

input_logger = getLogger('input')
input_logger.debug("got input1")
input_logger.debug("got input2")
input_logger.debug("got input3")

network_input_logger = getLogger('input.network')
network_input_logger.debug("got network input1")
network_input_logger.debug("got network input2")

getLogger('output')
output_logger.debug("sent output1")

然后最后我想得到一个总结,例如:

input: 5
input.network: 2
output: 1

我在想,通过为记录器或处理程序调用 getcount() 方法。

实现此目标的好方法是什么?我想它会涉及 logging 模块中其中一个类的子类,但我不确定最好的方法是什么。

最佳答案

使用装饰器可能会非常优雅,我还没有测试过这个,但像这样的东西可以工作:

class myDecorator(object):
def __init__(self, inner):
self.inner = inner
self.log = {}

def __getattr__(self,name):
self.log[name] = self.log.get(name,0)+1
return getattr(self.inner,name)

def __setattr__(self,name,value):
setattr(self.inner,name,value)

我意识到您不想记录对每个方法的调用次数,而是对每个不同记录器的调用次数。尽管如此,我认为装饰器可以非常优雅。

我认为我没有睡够,我的想法是将对记录器的调用包装起来,我混合使用装饰器和装饰器模式。 (实际上,模式和语法的混合会是一个很好的答案)

这是一个更完整的解决方案。对不起,我意识到我是 someone that was wrong on the internet .

class LoggerLogger(object):
def __init__(self,inner,name):
self.inner = inner
self.calls = 0
def __call__(self,*args,**kwargs):
self.calls += 1
return self.inner(*args,**kwargs)


def loggerDecorator(func):
def inner(name):
logger = func(name)
logger.debug = LoggerLogger(logger.debug,name)
return inner

getLogger = loggerDecorator(getLogger)

关于python - Python 日志记录的摘要计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2847282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com