簡體   English   中英

Django 記錄請求

[英]Django logging requests

我在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 應該自動記錄所有傳入的請求還是我必須創建一個中間件來執行logger.debug('something')

登錄 django 比我想象的要復雜得多:(

Django 記錄器擴展在開發和生產中的工作方式不同(settings.DEBUG=True|False)。

您希望看到的 - http 請求日志 - 由django.server記錄器編寫,
僅在開發服務器中有效(runserver 命令)。

我看到在您的配置中您使用了django.request記錄器。 這個記錄器名稱非常令人困惑 - 因為顧名思義 - 用戶會期望它記錄所有 http 請求 - 但它不會。

django.request只會記錄 4xx 和 5xx 請求。

我制作了一個截屏視頻,詳細解釋了這個問題。

關於記錄器的 Django 文檔。

登錄django的演示,日志位於/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,
        }
    },
}

記錄器的作用是:

  • info:您的自定義調試信息
  • django:請求記錄
  • django.request:錯誤請求
  • django.db.backends:與代碼與數據庫交互相關的消息

更多信息在這里

視圖.py

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

你會得到

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

稍后在 log/info.log 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM