Django记录请求

时间:2017-08-31 03:55:07

标签: python django logging

我在aws弹性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比我想象的复杂得多:(

2 个答案:

答案 0 :(得分:4)

登录django的演示,log是/path/to/your/project/log/info.log中的位置, 你需要先在log / dir中创建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,
        }
    },
}

记录器的效果是:

  • info:您的自定义调试信息
  • 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中

答案 1 :(得分:0)

Django logger扩展在开发中的工作与在生产中的工作不同(settings.DEBUG = True | False)。

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

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

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

我制作了screencast,其中详细解释了此问题。

Django documentation about loggers.