2011-08-05 14 views
5

私の主な目的は、主なアプリケーションとは別に、いくつかのカスタムハンドラクラス、フィルタなど、その他のエラーと統計レポートに使用される「ログ」アプリを作成することです。私のDjangoプロジェクトのためのdevのサーバーを実行している場合しかし、私はエラーが表示されます。Django dictConfigでカスタムロギングハンドラクラスを登録できません

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, 
     }, 
    } 
} 

私のアプリは非常に簡単である「ログ」のレイアウト、:設定で

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ディレクティブは次のようになりますそして現在:

log/ 
    __init__.py 
    handlers.py 
    models.py 

models.pyは、単一のモデル、LogHandlerが含まれています。

import logging 

from models import LogRecord 

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

エラー、私の知る限り、LogRecordのラインをインポートするモデルからを参照している:

from django.db import models 

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

handlers.pyは、単一のハンドラが含まれています。私はproject.log.modelsとlog.modelsを使用しようとしましたが、どちらも同じ結果をもたらします。また、ハンドラーをmodels.pyに移動して何もインポートしないようにしましたが、「モジュール」に属性「モデル」がないという似たエラーが表示されます。

ログアプリケーションがインストールされているアプリにあり、__ __ .pyが含まれています。

答えて

10

あなたは循環インポートを取得しているようです。あなたは、それ自体が

それはhttps://docs.djangoproject.com/en/dev/topics/logging/#topic-logging-parts-handlersで文書化されて

+2

私も同じ問題を抱えて(「円形輸入」の検索)settings.pyインポートモジュール内のハンドラクラスを定義することはできませんので、我々はこの問題を解決する方法は? –

+1

私はこれはあなたのロギングハンドラ自体がdjangoアプリケーションになれないことを意味すると思います。これをsettings.pyとは独立させるようにコーディングする必要があります。たとえば、mysql dbにログを記録する場合は、自分でコードを記述し、djangoのORMを直接使用する必要はありません。 – hoskeri

+0

私はhttp://stackoverflow.com/questions/12452904/custom-python-database-logger-having-circular-import/12468007#12468007についての作業を思いついた –

関連する問題