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