我正在尝试一个具有多种功能的项目。我正在使用标准 logging
模块 要求是记录 DEBUG 日志,其中显示:
<timestamp> DEBUG entered foo()
<timestamp> DEBUG exited foo()
<timestamp> DEBUG entered bar()
<timestamp> DEBUG exited bar()
但我不想在每个函数中写入调试日志。 Python 中有没有一种方法可以处理包含函数进入和退出的自动日志?
我不想对所有函数使用任何装饰器
,除非它是 Python 中唯一的解决方案。
最佳答案
你有什么理由不想使用装饰器吗?这很简单:
from functools import wraps
import logging
logging.basicConfig(filename='some_logfile.log', level=logging.DEBUG)
def tracelog(func):
@wraps(func) # to preserve docstring
def inner(*args, **kwargs):
logging.debug('entered {0}, called with args={1}, kwargs={2}'.format(func.func_name, *args, **kwargs))
func(*args, **kwargs)
logging.debug('exited {0}'.format(func.func_name))
return inner
如果你明白了,那么传入一个独立的记录器只是另一层深度:
def tracelog(log):
def real_decorator(func):
@wraps(func)
def inner(*args, **kwargs):
log.debug('entered {0} called with args={1}, kwargs={2}'.format(func.func_name, *args, **kwargs))
func(*args, **kwargs)
log.debug('exited {0}'.format(func.func_name))
return inner
return real_decorator
很酷的事情是,这适用于函数和方法
使用示例:
@tracelog(logger)
def somefunc():
print('running somefunc')
关于python - 当控制进入函数内部/外部时自动调试日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35715448/