Python 2.4.3: ConfigParser.NoSectionError: нет раздела: «форматеры»

#python #logging #config #configparser

#python #ведение журнала #конфигурация #configparser

Вопрос:

Пытаюсь использовать файл конфигурации ведения журнала для реализации TimedRotatinigFileHandler .

По какой-то причине просто не принимает файл конфигурации.

Любые предложения приветствуются.


x.py:

 import logging
import logging.config
import logging.handlers

logging.config.fileConfig("x.ini")

MyLog = logging.getLogger('x')

MyLog.debug('Starting') 
  

x.ini:

 [loggers]
keys=root

[logger_root]
level=NOTSET
handlers=trfhand

[handlers]
keys=trfhand

[handler_trfhand]
class=handlers.TimedRotatingFileHandler
when=M
interval=1
backupCount=11
formatter=generic
level=DEBUG
args=('/var/log/x.log',)

[formatters]
keys=generic

[formatter_generic]
class=logging.Formatter
format=%(asctime)s %(levelname)s %(message)s
datefmt=
  

 Traceback (most recent call last):
  File "x.py", line 5, in ?
    logging.config.fileConfig("x.ini")
  File "/usr/lib/python2.4/logging/config.py", line 76, in fileConfig
    flist = cp.get("formatters", "keys")
  File "/usr/lib/python2.4/ConfigParser.py", line 511, in get
    raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'formatters'
  

Спасибо

Комментарии:

1. В чем было исправление?

Ответ №1:

Сообщение об ошибке строго точное, но вводящее в заблуждение.

Причина, по которой отсутствует раздел «форматеры», заключается в том, что модуль ведения журнала не может найти файл, который вы передали logging.config.fileConfig .

Попробуйте использовать абсолютный путь к файлу.

Комментарии:

1. Большое вам спасибо! Сообщение об исключении было не очень полезным. Создание файла с именем logging.ini решает проблему.

Ответ №2:

Да, @ekhumoro был прав. Кажется, что logging ожидается абсолютный путь.Команда Python должна изменить это сообщение об ошибке на что-то более читаемое; он просто не может видеть мой файл, а не потому, что сам файл конфигурации неверен.

Мне удалось решить эту проблему, определив BASE_DIR переменную в файле конфигурации и импортировав ее в качестве префикса пути, как это делает Django. И не забудьте создать родительские каталоги файла журнала, если они не созданы.

Я определяю путь и регистратор в config.py :

 import os
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

import logging
import logging.config
logging.config.fileConfig(os.path.join(BASE_DIR, 'utils', 'logger.conf')) # the `logger.conf` locates under 'myproject/utils/'
logger = logging.getLogger("mylog") # 'mylog' should exist in `logger.conf` in the logger part
  

В других модулях:

 from config import logger
...

logger.info("Your loggings modules should work now!! - WesternGun")