Django 记录请求
Posted
技术标签:
【中文标题】Django 记录请求【英文标题】:Django logging requests 【发布时间】: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 比我想象的要复杂得多:(
【问题讨论】:
【参考方案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 中。
【讨论】:
以上是关于Django 记录请求的主要内容,如果未能解决你的问题,请参考以下文章