2011-08-05 31 views
5

我的目標是創建一個「日誌」應用程序,除了我的主要應用程序,將用於幾個自定義處理程序類,過濾器等,以及其他錯誤和統計報告。但運行我的Django項目開發服務器時,我收到錯誤:不能註冊自定義日誌處理類與Django dictConfig

File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/conf/__init__.py", line 42, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/Library/Python/2.7/site-packages/Django-1.3-py2.7.egg/django/conf/__init__.py", line 139, in __init__ 
    logging_config_func(self.LOGGING) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 776, in dictConfig 
    dictConfigClass(config).configure() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 575, in configure 
    '%r: %s' % (name, e)) 
ValueError: Unable to configure handler 'db_handler': Unable to configure handler 'db_handler': 'module' object has no attribute 'models' 

我的設置登錄指令的樣子:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'default': { 
      'format': '[%(asctime)s] %(levelname)s::(%(process)d %(thread)d)::%(module)s - %(message)s' 
     }, 
    }, 
    'handlers': { 
     'db_handler': { 
      'level': 'DEBUG', 
      'class': 'Project.log.handlers.db_handler' 
     }, 
     'file_handler': { 
      'level': 'DEBUG', 
      'formatter':'default', 
      'class': 'logging.TimedRotatingFileHandler', 
      'filename':'Custom_log', 
      'when':'midnight', 
      'interval':1 
     }, 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['db_handler'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
    } 
} 

我的「日誌」佈局應用程序是非常簡單的,目前:

log/ 
    __init__.py 
    handlers.py 
    models.py 

models.py都包含一個模型,LogHandler

from django.db import models 

class LogRecord(models.Model): 
    .... 
    .... 

handlers.py包含一個單獨的處理程序:

import logging 

from models import LogRecord 

class db_handler(logging.Handler): 
    def emit(self, record): 
     .... 
     .... 

錯誤,據我所知,從模型指的是進口的LogRecord線。我曾嘗試使用project.log.models和log.models,但都產生相同的結果。我也嘗試將處理程序移入models.py並且不導入任何東西,但是我得到一個類似的錯誤,說「模塊」沒有屬性「模型」。

我的日誌應用程序是在我安裝的應用程序,幷包含一個__ 初始化 __的.py。

回答

10

它看起來像你正在得到一個循環導入。你無法定義它本身進口settings.py

它在https://docs.djangoproject.com/en/dev/topics/logging/#topic-logging-parts-handlers是記錄(搜索「進口通告」)

+2

我也有同樣的問題一個模塊中的處理程序類,那麼,我們如何解決這個問題? –

+1

我認爲這只是意味着你的日誌處理程序本身不能是一個django應用程序。您需要將其編碼爲獨立於settings.py。例如,如果你想登錄到一個mysql數據庫,你將需要自己編寫代碼,而不是直接使用django的ORM。 – hoskeri

+0

我想出了一個解決方法http://stackoverflow.com/questions/12452904/custom-python-database-logger-having-circular-import/12468007#12468007 –

相關問題