2014-03-13 93 views
1

我目前正在開發一個使用Django 1.6.2的站點,並且我無法正確進行日誌記錄配置。Django - 記錄不覆蓋默認設置

我在設置文件上設置了「LOGGING」,但它似乎被忽略。這是我的設置文件:像

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
    import os 
    BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 

    # Quick-start development settings - unsuitable for production 
    # See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ 

    # SECURITY WARNING: keep the secret key used in production secret! 
    SECRET_KEY = "duummy" 

    # SECURITY WARNING: don't run with debug turned on in production! 
    DEBUG = True 

    TEMPLATE_DEBUG = True 

    ALLOWED_HOSTS = [] 


    # Application definition 

    INSTALLED_APPS = (
     'django.contrib.admin', 
     'django.contrib.auth', 
     'django.contrib.contenttypes', 
     'django.contrib.sessions', 
     'django.contrib.messages', 
     'django.contrib.staticfiles', 
     'channels' 
    ) 

    MIDDLEWARE_CLASSES = (
     'django.contrib.sessions.middleware.SessionMiddleware', 
     'django.middleware.common.CommonMiddleware', 
     'django.middleware.csrf.CsrfViewMiddleware', 
     'django.contrib.auth.middleware.AuthenticationMiddleware', 
     'django.contrib.messages.middleware.MessageMiddleware', 
     'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    ) 

    ROOT_URLCONF = 'my_app.urls' 

    WSGI_APPLICATION = 'my_app.wsgi.application' 


    # Database 
    # https://docs.djangoproject.com/en/1.6/ref/settings/#databases 

    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
      'NAME': 'db.sqlite3', 
     } 
    } 

    CACHES = { 
     'default': { 
      'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
      'LOCATION': '127.0.0.1:11211', 
     } 
    } 

    # Internationalization 
    # https://docs.djangoproject.com/en/1.6/topics/i18n/ 

    LANGUAGE_CODE = 'en-us' 

    TIME_ZONE = 'Brazil/East' 

    USE_I18N = True 

    USE_L10N = True 

    USE_TZ = True 


    # Static files (CSS, JavaScript, Images) 
    # https://docs.djangoproject.com/en/1.6/howto/static-files/ 

    STATIC_URL = '/static/' 

    # Logging 
    # 

    LOGGING_DIR = os.path.join(BASE_DIR, 'logs/') 

    LOGGING = { 
     'version': 1, 
     'disable_existing_loggers': True, 
     'formatters': { 
      'verbose': { 
       'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' 
      }, 
      'simple': { 
       'format': '%(asctime)s - %(module)s -> %(levelname)s - %(message)s' 
      } 
     }, 
     'filters': { 
      'require_debug_true': { 
       '()': 'django.utils.log.RequireDebugTrue', 
      } 
     }, 
     'handlers': { 
      'console':{ 
       'level': 'DEBUG', 
       'class': 'logging.StreamHandler', 
       'formatter': 'verbose' 
      }, 
      'debug_log_handler': { 
       'level': 'DEBUG', 
       'class': 'logging.FileHandler', 
       'filename': os.path.join(LOGGING_DIR, 'debug_log'), 
       'formatter':'verbose' 
      }, 
      'db_log_handler': { 
       'level': 'ERROR', 
       'class': 'logging.handlers.TimedRotatingFileHandler', 
       'filename': os.path.join(LOGGING_DIR, 'db_log'), 
       'when':'D', 
       'interval':1, 
       'formatter':'simple' 
      }, 
      'request_log_handler': { 
       'level': 'ERROR', 
       'class': 'logging.handlers.TimedRotatingFileHandler', 
       'filename': os.path.join(LOGGING_DIR, 'request_log'), 
       'when':'D', 
       'interval':1, 
       'formatter':'simple' 
      }, 
      'site_log_handler': { 
       'level': 'ERROR', 
       'class': 'logging.handlers.TimedRotatingFileHandler', 
       'filename': os.path.join(LOGGING_DIR, 'log'), 
       'when':'D', 
       'interval':1, 
       'formatter':'simple' 
      } 
     }, 
     'loggers': { 
      'django': { 
       'handlers': ['console', 'debug_log_handler'], 
       'level': 'DEBUG', 
       'propagate': True, 
       'filters': ['require_debug_true'] 
      }, 
      'django.db.backends': { 
       'handlers': ['db_log_handler'], 
       'level': 'ERROR', 
       'propagate': True 
      }, 
      'django.request': { 
       'handlers': ['request_log_handler'], 
       'level': 'ERROR', 
       'propagate': True 
      }, 
      'test': { 
       'handlers': ['site_log_handler'], 
       'level': 'ERROR', 
       'propagate': True 
      }, 
     } 
    } 

當我運行服務器,控制檯輸出信息:

[13/Mar/2014 01:25:12] "GET/HTTP/1.1" 404 2015 

它不打印調試信息,無論它是在我指定的格式打印爲控制檯。

我錯過了什麼嗎?

謝謝!

回答

0

當你運行服務器,看起來做了'GET /'時,Django會將請求記錄到'django.request'記錄器。而且,由於您將LOGGING.disable_existing_loggers設置爲True,因此必須使用您配置的django.request設置。

在LOGGING.loggers中,您將django.request的級別設置爲'ERROR'。但是,根據the documentation,4XX僅記錄爲警告。只有5XX被記錄爲錯誤。

0

的Django只記錄到四個記錄器,如記錄heredjangodjango.requestdjango.db.backendsdjango.security。其中第一個沒有被直接記錄,你已經將接下來的兩個級別設置爲ERROR - 這意味着它們不會記錄任何DEBUG消息 - 並且如果發生安全問題,最後一個只會記錄到。

嘗試test日誌級別設置爲DEBUG,增加console_handlerhandlers清單,並從您的視圖中的一個記錄一些DEBUG消息 - 你應該會看到一些輸出。