【问题标题】:python/django logging with decoratorspython/django 使用装饰器进行日志记录
【发布时间】:2017-12-04 05:44:39
【问题描述】:

我想在每个函数上放置一个装饰器来记录函数中发生的所有事情。我制作了一个包装函数和装饰器来用装饰器记录函数。

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)

问题是此代码中未创建日志文件。此外,它是在另一个项目上创建的,但没有在日志文件(空日志文件)中打印任何内容。我想在日志文件中为正在发生的一切打印一条消息,但这似乎不起作用。请帮忙。

【问题讨论】:

  • 请先格式化并正确缩进您的代码。
  • 我做到了。谢谢你让我知道。 @影子

标签: python django logging wrapper


【解决方案1】:

装饰器内部函数应该返回带有 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

【讨论】:

  • 非常感谢!我还必须跟踪模型发生的更改或修改以及已更改的内容。我正在使用 audit_log,但它并没有真正帮助。
  • 我建议将 Django logger 用于模型以及有关日志记录的所有内容...
  • 谢谢,会看到并通知您!
猜你喜欢
  • 2010-12-11
  • 2015-02-17
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 2010-12-23
  • 2011-09-16
相关资源
最近更新 更多