【问题标题】:Cannot filter out logs from the console无法从控制台过滤掉日志
【发布时间】:2020-04-28 14:32:48
【问题描述】:

我正在尝试从控制台中过滤掉某些端点日志。我的settings.py 看起来像这样:

def skip_rss_requests(record):
    if record.args and record.args[0].startswith('GET /api/feed/rss/'):
        print("HEEERRRRREEEE")
        return False
    return True


LOGGING = {
  'version': 1,
  'disable_existing_loggers': False,
  'filters': {
    'skip_rss_requests': {
        '()': 'django.utils.log.CallbackFilter',
        'callback': skip_rss_requests
    }
  },
  'formatters': {
    'simple': {
        'format': '[%(asctime)s] %(levelname)s|%(name)s|%(message)s',
        'datefmt': '%Y-%m-%d %H:%M:%S',
    },
  },
  'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'filters': ['skip_rss_requests'],
            # 'stream': sys.stdout,
            'formatter': 'simple'
        },

但是,尽管满足条件,我仍然在控制台输出中看到这些日志:

[2020-04-28 13:31:11] INFO|django.request|GET /api/feed/rss/
[2020-04-28 13:31:13] INFO|django.request|GET /api/feed/rss/ - 200
HEEERRRRREEEE

关于为什么这些记录仍在被记录的任何想法?

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    更新: 我认为您想要的是在记录器部分添加您的自定义过滤器作为django.request 的过滤器:

    LOGGING = {
        'loggers': {
            'django.request':{
                'filters': ['skip_rss_requests'],
                'propagate': False, # stop it from propagating to parent
                # ... and other settings
            }
        }
    }
    
    

    更新:抱歉,我看错了问题。

    那些INFO|django.request 来自django.request 记录器。当您设置'disable_existing_loggers': False 时,您可以重新定义默认记录器,但在您的记录器设置中您没有覆盖djang.request 记录器,这就是它仍然使用默认django.request 记录器的原因。

    参考:https://docs.djangoproject.com/en/3.0/topics/logging/#configuring-logging

    您可以将 DEBUG 设置为 False 以禁用显示 INFO|django.request 日志


    根据 Django 文档

    如果您根本不想配置日志记录(或者您想使用自己的方法手动配置日志记录),您可以将 LOGGING_CONFIG 设置为 None

    # settings.py
    LOGGING_CONFIG = None
    
    import logging.config
    logging.config.dictConfig(...)
    

    参考:https://docs.djangoproject.com/en/3.0/topics/logging/#disabling-logging-configuration

    【讨论】:

    • 不幸的是,我想要所有的 INFO|django.request 日志。只是不适用于这个特定的端点。我已经尝试了您建议的方法,但仍然看到该端点的所有日志
    • @COB 您是否将skip_rss_requests 过滤器作为django.request 记录器上的过滤器?我在你的代码 sn-p 中没有看到它。
    • 像这样?:` 'loggers': { 'django.request': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': True, '过滤器':['skip_rss_requests'],},`
    • @COB 是的,我认为它应该是该记录器的一部分
    • @COB 最后一件事....您是否也可以在django.server 记录器中应用该过滤器?如果您使用“python manage.py runserver”运行此代码,它将使用django.server 记录相同的内容。参考:docs.djangoproject.com/en/3.0/topics/logging/#django-server
    【解决方案2】:

    最后,这行得通:

    def skip_rss_requests(record):
        if  hasattr(record, 'request') and hasattr(record.request, 'path') and '/rss/' in record.request.path:
                return False
        return True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多