我的代码如下
@newrelic.agent.data_store_trace('Mysql', '<name>',None)
def get_user(request=None, name=settings.DEFAULT_NAME):
# Some implementation
在装饰器中,代替<name>
我想传递装饰函数中的名称。
请注意,我不想修改/覆盖装饰器,因为newrelic会不时更新包装,这对我们来说是个问题。
任何解决方案???
答案 0 :(得分:0)
装饰器只是包装函数。
编写另一个包装newrelic.agent.data_store_trace
的包装函数,并允许传递名称。
Say New Relic将data_store_trace
定义为:
import functools
def data_store_trace(product, target, operation):
def wraps(fn):
@functools.wraps(fn)
def wrapped(*args, **kwargs):
print('Tracing: ', fn.__name__, args, kwargs)
return fn(*args, **kwargs)
return wrapped
return wraps
添加另一个间接级别将给出:
def data_store_trace_with_name(product, operation, target=''):
def wraps(fn):
@functools.wraps(fn)
def wrapped(*args, **kwargs):
return data_store_trace(product, target, operation)(fn)(*args, **kwargs)
return wrapped
return wraps
@data_store_trace_with_name('Mysql', None, '<name>')
def add(x, y):
return x + y
add(5, 6)