所以我尝试创建一个decorator函数来记录方法及其参数。下面是我创建的decorator函数:
def logInstanceMethod(infoMessage=None):
def logFunction(f):
def function(self,*args, **kwdargs):
#Info Logging
if infoMessage is None:
logging.info("Running method: " + f.__code__.co_name)
else:
logging.info(infoMessage)
#Debug logging
logging.debug('Running method: ' + f.__code__.co_name)
if len(args) > 0:
logging.debug("With args: ")
for arg in args:
logging.debug(arg)
if len(kwdargs) > 0:
logging.debug("With keyword args: ")
for kwdarg in kwdargs:
logging.debug(kwdarg)
return(f(self, *args, **kwdargs))
return(function)
return(logFunction)
如果我将它用于以下方法:
@logInstanceMethod("Method A is running...")
def methodA(self, a):
print("You ran this function with the parameters: " + a)
然后运行loggingLevel=DEBUG
:
methodA('MyParam')
它将记录:
INFO Method A is running...
DEBUG Running method: methodA
DEBUG With args:
DEBUG MyParam
它会打印:
You ran this function with the parameters: MyParam
所以上面的decorator函数完成了我希望它完成的100%,但是为了让函数运行,我需要有一行:return(f(self, *args, **kwdargs))
。我不喜欢这样,因为这意味着正确调用的函数依赖于这行代码。有没有办法让被记录的方法在不直接返回logging decorator方法中的函数的情况下仍然执行?这对我来说似乎是个糟糕的设计,即使它能工作。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐