python/django 使用装饰器进行日志记录
python/django logging with decorators
我想在每个函数上放置一个装饰器来记录函数中发生的所有事情。我做了一个包装函数和装饰器来用装饰器记录函数。
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)
问题是此代码中未创建日志文件。此外,它是在另一个项目上创建的,但没有在日志文件(空日志文件)中打印任何内容。我想在日志文件中为正在发生的一切打印一条消息,但这似乎不起作用。请帮助。
装饰器内部函数应该 return 带有 args 和 kwargs 的外部函数,你的装饰器问题将得到解决,但另一个问题是 Django 无法 stdr 这个装饰视图函数的控制台输出。
def func_detail(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
logging.getLogger(__name__)
----
return func(*args, **kwargs)
return func_wrapper
我想在每个函数上放置一个装饰器来记录函数中发生的所有事情。我做了一个包装函数和装饰器来用装饰器记录函数。
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)
问题是此代码中未创建日志文件。此外,它是在另一个项目上创建的,但没有在日志文件(空日志文件)中打印任何内容。我想在日志文件中为正在发生的一切打印一条消息,但这似乎不起作用。请帮助。
装饰器内部函数应该 return 带有 args 和 kwargs 的外部函数,你的装饰器问题将得到解决,但另一个问题是 Django 无法 stdr 这个装饰视图函数的控制台输出。
def func_detail(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
logging.getLogger(__name__)
----
return func(*args, **kwargs)
return func_wrapper