我想在每个函数上放置一个装饰器来记录函数中发生的所有事情。我制作了一个包装函数和装饰器来使用装饰器记录该函数。
views.py
def func_detail(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
r = func(*args, **kwargs)
logging.getLogger(__name__)
logging.basicConfig(filename='test.log', filemode='a',
format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
datefmt='%H:%M:%S',
level=logging.DEBUG)
return r
return func_wrapper
class UsersViewSet(viewsets.ViewSet):
@func_detail
def list(self, request):
queryset = Mytable.objects.all()
if request.GET.get('name'):
queryset = queryset.filter(name=request.GET.get('name'))
serializer = CheckSerializer(queryset, many=True)
logging.info("GET request and returned response")
return Response(serializer.data)
问题是此代码中未创建日志文件。此外,它是在不同的项目上创建的,但没有在日志文件(空日志文件)中打印任何内容。我想在日志文件中打印正在发生的所有事情的消息,但这似乎不起作用。请帮忙。
最佳答案
装饰器内部函数应该返回带有args和kwargs的外部函数,并且您的装饰器问题将解决,但另一个问题是Django无法stdr此装饰 View 函数的控制台输出。
def func_detail(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
logging.getLogger(__name__)
----
return func(*args, **kwargs)
return func_wrapper
关于使用装饰器进行 python/django 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47627187/