2011-08-05 14 views
5

Amacım, ana uygulamam dışında, birkaç özel işleyici sınıfı, filtre vb. Ve diğer hata ve durum raporları için kullanılacak bir "günlük" uygulaması oluşturmaktır. ,Özel günlüğe kaydetme işleyicisi sınıfı Django dictConfig ile kaydedilemiyor

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

benim "log" düzeni uygulaması oldukça basittir: ayarlarında

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' 

Benim KAYITLARI direktifi gibi görünür: benim Django proje için dev sunucusu çalıştırırken Ama hata alırsınız şu anda:

log/ 
    __init__.py 
    handlers.py 
    models.py 

models.py tek bir model, LogHandler içerir:

import logging 

from models import LogRecord 

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

hata, bildiğim kadarıyla söyleyebilirim, LogRecord çizgi ithalat modellerden bahsediyor:

from django.db import models 

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

ve handlers.py tek bir işleyici içerir. Project.log.models ve log.models kullanmayı denedim, ancak her ikisi de aynı sonuçları veriyor. Ayrıca, işleyiciyi models.py'ye taşımaya çalıştım ve hiçbir şey almamaya çalıştım, ancak "modül" ünün "model" özniteliğine sahip olmadığını söyleyen benzer bir hata alıyorum.

Benim günlük uygulaması benim yüklü uygulamalar olduğunu ve bir __ init __ .py içerir.

cevap

10

Dairesel bir içe aktarma alıyorsunuz gibi görünüyor. Sen kendini

O https://docs.djangoproject.com/en/dev/topics/logging/#topic-logging-parts-handlers de belgelenmiştir

+2

Ben de aynı sorunu yaşıyor ('dairesel ithalat' için ara) settings.py ithal eden bir modülde bir işleyici sınıfını tanımlamak edemez, bu yüzden bu sorunu çözmek nasıl? –

+1

Bence bu sadece sizin logging işleyicinizin bir django uygulaması olamayacağı anlamına geliyor. Settings.py'den bağımsız olarak kodlamanız gerekecek. Örneğin, bir mysql db'ye giriş yapmak istiyorsanız, kodu kendiniz yazmanız ve doğrudan django'nun ORM'sini kullanmanız gerekmeyecektir. – hoskeri

+0

http://stackoverflow.com/questions/12452904/custom-python-database-logger-having-circular-import/12468007#12468007 hakkında bir çalışma yaptım. –

İlgili konular