如何在django中设置自定义记录器过滤器

Mar*_*ski 2 django logging

我正在尝试在django中设置自定义日志过滤器,但我遇到了错误:

ValueError: Unable to configure filter 'user_filter': 'module' object has no attribute 'Filter'
Run Code Online (Sandbox Code Playgroud)

当我尝试运行django开发服务器时,我收到此错误.

这样做的目的是记录用户的名称,这是我的中间件中定义的请求变量.

这是我在我的settigs.py:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format': '%(asctime)s %(user)s [%(levelname)s] %(name)s: %(message)s'
        },
    },
    'filters': {
        'user_filter': {
            '()': 'creative.logging.UserFilter',
        }
    },
    'handlers': {
        'default': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': BASE_DIR+'/logs/default.log',
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'standard',
        },
        'request_handler': {
                'level':'DEBUG',
                'class':'logging.handlers.RotatingFileHandler',
                'filename': BASE_DIR+'/logs/django_request.log',
                'maxBytes': 1024*1024*5, # 5 MB
                'backupCount': 5,
                'formatter':'standard',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['default'],
            'level': 'DEBUG',
            'format':'%(asctime)s | %(levelname)s | %(funcName)s |%(message)s',
            'propagate': False,
            'filters': ['user_filter']
        },
        'django.request': {
            'handlers': ['request_handler'],
            'level': 'DEBUG',
            'propagate': False
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

并在creative/logging.py:

import logging

class UserFilter(logging.Filter):
     def filter(self, record):
         record.user = record.request.user_profie['fullName']
         return True
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Cee*_*man 8

如评论中所述,您将文件命名为logging.py覆盖所选的默认模块import logging.