2013-09-03 4 views
3

Я пытаюсь войти в файл, поддерживающий файл конфигурации, как следующую структуру каталогов с содержимым ниже файла.Python - Handler не обнаруживает пользовательский класс обработчика

HERE/ 
|--WORKSPACE/ 
| |-- PROJECT/ 
| | |-- project/ 
| | | |-- confs/ 
| | | | |-- __init__.py 
| | | | |-- custom_handler.py 
| | | | |-- log.ini 
| | | |-- log.py 

log.py:

import os 
import logging.config 

logging.raiseExceptions = True 
curr_dir = os.path.dirname(os.path.realpath(__file__)) 
CONFIG = os.path.join(curr_dir, 'confs/log.ini') 

logging.config.fileConfig(CONFIG) 

log.ini:

[loggers] 
keys=file 

[logger_file] 
handlers=file 
level=NOTSET 

[formatters] 
keys=complex 

[formatter_complex] 
format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s 

[handlers] 
keys=file 

[handler_file] 
class=custom_handler.TRFileHandler 
interval=W2 
backupCount=2 
formatter=complex 
level=WARNING 
args=('project.log',) 

custom_handler.py:

import os 
from logging.handlers import TimedRotatingFileHandler 

curr_dir = os.path.dirname(os.path.realpath(__file__)) 
parent_dir = os.path.dirname(curr_dir) 
LOGS_DIR = os.path.join(parent_dir, 'logs') 


class TRFileHandler(TimedRotatingFileHandler): 
    def __init__(self, file_name): 
     if not os.path.isdir(LOGS_DIR): 
      os.makedirs(LOGS_DIR) 
     super(TRFileHandler, self).__init__(os.sep.join(LOGS_DIR, file_name)) 

Когда я запускаю следующую команду, я получаю сопровождающая ошибка. Это похоже на проблему с путём python. Но я не уверен в этом. Он работает с файлами python на уровне каталога «confs».

~HERE$ python WORKSPACE/PROJECT/project/log.py 

Traceback (most recent call last): 
    File "WORKSPACE/PROJECT/project/log.py", line 8, in <module> 
    logging.config.fileConfig(CONFIG) 
    File "/usr/lib/python2.7/logging/config.py", line 78, in fileConfig 
    handlers = _install_handlers(cp, formatters) 
    File "/usr/lib/python2.7/logging/config.py", line 153, in _install_handlers 
    klass = _resolve(klass) 
    File "/usr/lib/python2.7/logging/config.py", line 88, in _resolve 
    found = __import__(used) 
ImportError: No module named custom_handler 

ответ

2

Ваш sys.path должен содержать каталог project/confs, в противном случае вы не сможете импортировать custom_handler модуль. Повторите попытку, убедившись, что это так.

Обновление: Я не уверен log.py - это место, где можно задать свой путь. Существует не один правильный способ сделать это - существуют различные учебники по настройке проектов Python.

+0

Да. Это решение проблемы. Но у меня есть еще одно сомнение, связанное с этим. Какой был бы правильный способ сделать это, учитывая, что может быть несколько таких пакетов или каталогов? Можем ли мы использовать __init__.py для этого. В настоящее время я добавил в log.py следующее: sys.path.append (os.path.dirname (CONFIG)) –

Смежные вопросы