Django - 禁用 staticfiles 日志记录

6

新手问题:

我想在控制台上禁用静态资源的日志记录,我只想看到普通的http请求(但不是静态文件的请求)。

我总是在控制台上看到所有静态文件加载的信息,比如:

[24/Sep/2014 22:18:55] "GET / HTTP/1.1" 200 39816
[24/Sep/2014 22:18:55] "GET /static/2.5.11/socialschools/css/molengo/molengo-regular-webfont.css HTTP/1.1" 200 509
[24/Sep/2014 22:18:55] "GET /static/2.5.11/socialschools/js/less.1.7.0.min.js HTTP/1.1" 200 101854
[24/Sep/2014 22:18:55] "GET /static/2.5.11/socialschools/js/html5shiv.3.7.0.js HTTP/1.1" 200 2428
[24/Sep/2014 22:18:55] "GET /static/2.5.11/socialschools/js/jquery.1.9.1.min.js HTTP/1.1" 200 92629
[24/Sep/2014 22:18:55] "GET /static/2.5.11/socialschools/js/respond.1.4.2.min.js HTTP/1.1" 200 4377
[24/Sep/2014 22:18:55] "GET /static...

有没有办法禁用这个?

例如在express(nodejs)中,如果我把日志中间件放在静态资源的中间件之前,它就不会记录静态文件。非常感谢您的帮助!

2个回答

3
我看到这个问题已经很旧了(4年零8个月),我想为这个任务添加可能的解决方案。由于控制台上静态资源的日志记录受日志记录模块的管辖,答案在于日志记录配置。filter是Python日志记录中的一个概念,它允许通过记录器链进一步填充record,或者通过返回布尔值True或False来简单地抑制它。
我遇到过这个问题几次,所以我想在这里提供一个解决方案:
1. 让我们在somemodule中编写一个过滤器。
from logging import Filter

class SkipStaticFilter(Filter):
    """ Logging filter to skip logging of staticfiles to terminal """
    def filter(self, record):
        return not record.getMessage().startswith('GET /static/')

编辑:对于Django 2.2:将GET /static/替换为HTTP GET /static/
  1. 现在让我们将此过滤器添加到设置中:

LOGGING = {
    # Definition of filters
    'filters': {    
        'hide_staticfiles': {    
            '()': 'somemodule.SkipStaticFilter'    
        }
    },
    'version': 1,    
    'disable_existing_loggers': False,    
    'handlers': {    
        'console': {    
            'class': 'logging.StreamHandler',

            # Usage of that filter
            'filters': ['hide_staticfiles']    
        },    
    },    
    'loggers': {    
        'django': {
            # Usage of the handler with our filter  
            'handlers': ['console'],   
        }    
    },    

}   


现在您将不会看到任何以"GET /static/开头的日志记录。您可以添加更多的工作进程,并使用复杂的规则来决定是否想要查看该记录(例如,如果它们是404,则不要隐藏静态请求)。希望这能帮助某些人摆脱日志污染。"最初的回答"。

谢谢,@Alex 在我的情况下,我不得不稍微改变条件(Django 4.2),因为它以"开头return not record.getMessage().startswith('"GET /static') - undefined

0

这种问题不应该通过日志配置和特殊过滤器来解决吗? - MrColes
如果您能使其运作,我相信社区会非常感激。 - Brandon Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接