如何解决如何增加将记录器传递给timeit装饰器的功能
我有这个timeit装饰器,可以打印它装饰的任何函数的开始和结束时间:
import logging
import sys
import time
import datetime as dt
def timeit(method):
def timed(*args,**kw):
ts = time.time()
print '''started {method_name} with args: {args},kw: {kw} at {ts}'''.format(method_name=method.__name__,args=args,kw=kw,ts=time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()))
result = method(*args,**kw)
te = time.time()
print '''finished {method_name} with args: {args},kw: {kw} at {ts},after {ts_delta}'''.format(method_name=method.__name__,time.gmtime()),ts_delta=dt.timedelta(seconds=(te - ts)))
return result
return timed
@timeit
def foo(a,b):
print a + b
def main():
foo(2,b=3)
if __name__ == '__main__':
main()
当我运行此代码时,输出为:
started foo with args: (2,),kw: {'b': 3} at 2020-10-21 10:15:45 5 finished foo with args: (2,kw: {'b': 3} at 2020-10-21 10:15:45,after 0:00:00.000058
我想要的是将记录器传递给timeit
装饰器,并在装饰器中使用它,而不是使用print
命令,例如:
logging.basicConfig(stream=sys.stdout,level=logging.DEBUG)
logger = logging.getLogger('some_logger')
@timeit(logger=logger) # <-- logger as a parameter
def foo(a,b):
print a + b
到目前为止,只有装饰器是全局的,我才能在装饰器中使用logger
(不将其作为参数传递)。很好,但是显然我不希望将装饰器复制到有记录器的每个位置。
将记录器作为参数传递的诀窍是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。