python - 如何将 site_id 或主机添加到 Django 调试日志?

标签 python django logging

我制作了一个多站点应用程序,它在中间件中设置 django SITE_ID 设置如下:

host = request.get_host()
site = Site.objects.get(domain=host)
settings.SITE_ID = site.id

一切正常,但 django 调试日志产生如下字符串:

2014-08-12 16:13:32,484 WARNING base: Not Found: /href

这很好,但我真的需要知道它们来自哪个站点/主机,这样做的好方法是什么?

我当前的日志记录设置:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
                'format': '%(asctime)s %(levelname)s %(module)s: %(message)s',
            },
        },
        'handlers': {
            'file': {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': 'django.debug.log',
                'formatter': 'verbose',
            },
        },
        'loggers': {
            'django.request': {
                'handlers': ['file'],
                'level': 'DEBUG',
                'propagate': True,
            },
        },
    }

最佳答案

这样做的:

logging_filters.py:

import logging
from django.conf import settings


class SiteFilter(logging.Filter):

    def filter(self, record):

        record.site = settings.SITE_ID  # set dynamically in middleware.py
        return True

settings.py: (project.settings)

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'filters': {  # !
            'site_filter': {
                '()': 'project.logging_filters.SiteFilter',
            }
        },
        'formatters': {
            'verbose': {  # %(site)s - from filter
                'format': '%(asctime)s %(site)s %(levelname)s %(module)s: %(message)s',
            },
        },
        'handlers': {
            'file': {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': 'example.com.django.debug.log',
                'filters': ['site_filter'],  # !
                'formatter': 'verbose',
            },
        },
        'loggers': {
            'django.request': {
                'handlers': ['file'],
                'level': 'DEBUG',
                'propagate': True,
                'filters': ['site_filter'],  # !
            },
        },
    }

关于python - 如何将 site_id 或主机添加到 Django 调试日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25273473/

相关文章:

python - 类别的一次性编码

python - tf.test.is_built_with_cuda() 应该输出什么?

java - 使用 SLF4J 动态更改日志文件位置并且独立于日志记录框架

python - 如何在Python2.7中制作一个有效的爬虫

python - 为什么 whitenoise 在 Heroku 上的默认 Django 项目中崩溃?

python - makemigration 导致错误 "TypeError: expected str, bytes or os.PathLike object, not NoneType"

python - Django:关键字参数 'initial' 的多个值

java - 删除文件附加程序后,Log4j2 不会登录到服务器

python - 在 Python PEP 8 的字符串中使用反斜杠时使日志输出漂亮吗?

python - Keras ImageDataGenerator 设置均值和标准差