打切面日志的装饰器
点点寒彬 2018-10-17 00:13:54
Python
背景
在编写代码的时候,有可能会用到切面日志这种比较通用的内容,因此做一下记录。
代码
# ecoding=utf-8
# Author: Sven_Weng
# Email : sven_weng@wengyb.com
# Web : http://www.wengyb.com
import time
import functools
def log(func):
@functools.wraps(func)
def inner_methods(*args, **kwargs):
t0 = time.time()
result = func(*args, **kwargs)
t1 = time.time()
name = func.__name__
arg_list = []
if args:
arg_list.append(', '.join([str(arg) for arg in args]))
if kwargs:
pairs = ['{0}={1}'.format(k, w) for k, w in sorted(kwargs.items())]
arg_list.append(', '.join(pairs))
print "[{0}]func_name:{1},args:({2})".format(str(t1 - t0), name, arg_list)
return result
return inner_methods
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
使用方式
@log
def test(a, b):
print a+b
1
2
3
2
3
执行结果:
[6.4849853515625e-05]func_name:test,args:(['1, 2'])
1
第一个括号内容是装饰器修饰的函数执行的时间,然后是函数名,最后是入参