Поскольку вы используете Python 2.7, вы можете использовать словарную конфигурацию, используя dictConfig()
: это более гибко, чем fileConfig()
, так как позволяет использовать произвольные вызываемые объекты в качестве фабрик для возврата, например, обработчиков, средства форматирования или фильтры.
Если у вас есть для использования fileConfig()
, вам нужно будет создать вызываемый объект, который принимает строковые значения format
и datefmt
и возвращает экземплярвашего класса.Значение class
нужно просто преобразовать в вызываемый, а не в реальный класс.Вот настройка, которая работает: В этой сущности у меня есть файл custfmt.py
, который содержит определение средства форматирования, и сценарий fcfgtest.py
, который использует его через fileConfig()
.Просто поместите файлы в «чистый» каталог и запустите fcfgtest.py
- вы должны увидеть результат, подобный следующему:
20:17:59 debug message
20:17:59 info message
20:17:59 [WARNING] warning message
20:17:59 [ERROR] error message
20:17:59 [CRITICAL] critical message
, который, кажется, вам нужен.
Обратите внимание, что вы можете использоватьальтернативный дизайн для вашего форматтера, который должен выполнять ту же работу:
class AltCustomFormatter(logging.Formatter):
def format(self, record):
if record.levelno in (logging.WARNING,
logging.ERROR,
logging.CRITICAL):
record.msg = '[%s] %s' % (record.levelname, record.msg)
return super(AltCustomFormatter , self).format(record)
Чтобы использовать это, вам не нужна отдельная заводская функция, поэтому вы можете просто использовать
class=custfmt.AltCustomFormatter
вместо
class=custfmt.factory
, и это должно сработать - это сработало для меня, когда я тестировал только сейчас, используя Python 2.7.1: -)