私の主な目的は、主なアプリケーションとは別に、いくつかのカスタムハンドラクラス、フィルタなど、その他のエラーと統計レポートに使用される「ログ」アプリを作成することです。私の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が含まれています。
私も同じ問題を抱えて(「円形輸入」の検索)settings.pyインポートモジュール内のハンドラクラスを定義することはできませんので、我々はこの問題を解決する方法は? –
私はこれはあなたのロギングハンドラ自体がdjangoアプリケーションになれないことを意味すると思います。これをsettings.pyとは独立させるようにコーディングする必要があります。たとえば、mysql dbにログを記録する場合は、自分でコードを記述し、djangoのORMを直接使用する必要はありません。 – hoskeri
私はhttp://stackoverflow.com/questions/12452904/custom-python-database-logger-having-circular-import/12468007#12468007についての作業を思いついた –