Django 记录请求

Chr*_*nis 11 python django logging

我在aws弹性 beantalk 中使用 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)
Run Code Online (Sandbox Code Playgroud)

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

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

小智 9

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

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

我看到在您的配置中您使用了django.request记录器。这个记录器名称非常令人困惑 - 因为顾名思义 - 用户会期望它记录所有 http 请求 - 但它不会。

django.request只会记录 4xx 和 5xx 请求。

我制作了一个截屏视频,详细解释了这个问题。

关于记录器的 Django 文档。

  • 出于安全原因,Fiefox 不允许打开 screencas 链接,即证书不受信任。 (2认同)

Ykh*_*Ykh 5

登录django的demo,log位置在/path/to/your/project/log/info.log,你需要先在log/dir中创建info.log。

设置.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,
        }
    },
}
Run Code Online (Sandbox Code Playgroud)

记录器的作用是:

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

更多信息在这里

视图.py

import logging
logger = logging.getLogger("info")
logger.info('something')
Run Code Online (Sandbox Code Playgroud)

你会得到

2017-08-31 13:05:40,492 [INFO]- something
Run Code Online (Sandbox Code Playgroud)

稍后在 log/info.log 中。