【问题标题】:Django logging requestsDjango 记录请求
【发布时间】:2018-02-08 21:49:51
【问题描述】:

我在aws elastic beanstalk 中使用 django 1.11,我一直试图让我的应用程序登录但没有运气。 . .

我的 settings.py 中有这些

LOGGING_CONFIG = None
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/opt/python/current/app/staging.log',
        },
    },
    'loggers': {
        '': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
import logging.config
logging.config.dictConfig(LOGGING)

然后我尝试调用我的一个 API,并期望日志中会显示一些内容,但它没有。我 django.request 记录器应该自动记录所有传入的请求,还是我必须创建一个可以执行 logger.debug('something') 的中间件?

登录 django 比我想象的要复杂得多:(

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    Django 记录器扩展在开发和生产中的工作方式不同(settings.DEBUG=True|False)。

    您希望看到的 - http 请求日志 - 由 django.server 记录器编写,
    仅在开发服务器中有效(runserver 命令)。

    我看到在你的配置中你使用了 django.request 记录器。这个记录器名称非常令人困惑 - 因为正如其名称所暗示的那样 - 用户希望它记录所有 http 请求 - 但它不会。

    django.request 将仅记录 4xx 和 5xx 请求。

    我发了screencast 详细解释了这个问题。

    Django documentation about loggers.

    【讨论】:

    • Fiefox 出于安全原因不允许打开 screencas 链接,即证书不受信任。
    • django.request 记录器的 Django 文档没有提到它只记录 4xx 和 5xx 的事实让我大吃一惊。感谢您指出这一点。
    【解决方案2】:

    django登录demo,log在/path/to/your/project/log/info.log, 您需要先在 log/ 目录中创建 info.log。

    settings.py

    LOG_PATH = os.path.join(BASE_DIR, "log/")
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
        'formatters': {
            'standard': {
                'format': '%(asctime)s [%(levelname)s]- %(message)s'}
    
        },
        'handlers': {
            'django_error': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': LOG_PATH + 'django.log',
                'formatter': 'standard'
            },
            'info': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': LOG_PATH + 'info.log',
                'formatter': 'standard'
            },
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'standard'
            }
        },
        'loggers': {
            'info': {
                'handlers': ['info', "console"],
                'level': 'DEBUG',
                'propagate': True
            },
            'django': {
                'handlers': ['console'],
                'level': 'INFO',
                'propagate': True,
            },
            'django.request': {
                'handlers': ['django_error', 'console'],
                'level': 'DEBUG',
                'propagate': True,
            },
            'django.db.backends': {
                'handlers': ['console'],
                'level': 'ERROR',
                'propagate': True,
            }
        },
    }
    

    记录器的作用是:

    • 信息:您的自定义调试信息
    • django:请求记录
    • django.request:错误请求
    • django.db.backends:消息 关于代码与数据库的交互

    更多信息here

    views.py

    import logging
    logger = logging.getLogger("info")
    logger.info('something')
    

    你会得到

    2017-08-31 13:05:40,492 [INFO]- something
    

    稍后在 log/info.log 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 2013-02-08
      • 2014-07-18
      相关资源
      最近更新 更多