【问题标题】:Django Logging - Unable to set propagate to FalseDjango 日志记录 - 无法将传播设置为 False
【发布时间】:2021-05-20 10:14:50
【问题描述】:

我遇到的情况是我的日志中出现重复条目​​。我环顾四周,似乎我必须在我已经完成的记录器配置中设置'propagate': False。但是,当我打印出logger.propagate 时,它会返回True。我什至尝试手动设置logger.propagate = False,但它仍然返回True,并且我的日志中收到重复条目。

问题的原因可能是什么?

import logging
logger = logging.getLogger(__name__)
logger.propagate = False
class PostsListAPIView(ListAPIView):
    def get_queryset(self):
        # Getting both twice
        logger.error('Something went wrong!')  
        logger.error(logger.propagate)  # Returns True
        queryset = ...
        return queryset
 LOGGING = { 
      "version": 1,
      "disable_existing_loggers": False,
      "formatters": {
          "simple": {
              "format": "{levelname} {message}",
              "style": "{",
          }   
      },  
      "handlers": {
          "console": {
              "level": "DEBUG",
              "class": "logging.StreamHandler",
              "formatter": "simple",
          },  
      },  
      "loggers": {
          "app": {
              "level": "DEBUG",
              "handlers": ["console"],
              'propagate': False,
  
          }   
      },  
  }

我也试过设置"disable_existing_loggers": True,但是没有效果。

【问题讨论】:

    标签: python-3.x django django-rest-framework python-logging django-logging


    【解决方案1】:

    至于获取重复的日志条目,我发现原因是get_queryset 方法被调用了两次,以便在我的BrowsableAPI 启用时显示表单。

    但是我仍然不明白为什么logger.propagate 返回True

    【讨论】:

    • 您很可能在不同的记录器上设置传播。您是否检查过__name__ 的值实际上与您的记录器的名称相同?
    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2011-07-23
    • 2014-11-09
    • 2013-09-11
    • 2020-02-25
    • 1970-01-01
    • 2010-12-08
    • 2014-04-17
    相关资源
    最近更新 更多