Быстрый и хакерский способ:
Вы можете использовать eval()
. Он выполняет код Python в строках. ( Документы )
Пример:
import logging
logging.basicConfig(
level=eval('logging.INFO')
)
logging.info('Works!')
Выходы:
INFO:root:Works!
Хотя это работает, использование eval
считается плохой практикой, посколькуВы можете выполнить любой код Python, так что это небезопасно, т. е. может передать что-либо в конфигурации, и оно будет выполнено в вашем приложении. Подробнее здесь .
Безопасный подход:
В вашем конфигурационном файле вы можете передать «ваши» ключевые слова определенного уровня, такие как info
или warning
и т. Д. ( Все уровни )
Пример конфигурации:
log:
filename: 'log'
format: '%(levelname)s:%(message)s'
level: 'info'
В коде вы можете создать отображение между этими словами и фактической регистрациейУровень, а затем создать экземпляр регистратора с этим.
import logging
#Create mappings
level_mapping = {'info': logging.INFO, 'warning': logging.WARNING}
#Read your config file
config = {}
#When passed logging level doesn't exist in mappings, raise an exception
if config['log']['level'] not in level_mapping:
raise ValueError('Invalid logging level passed in config!!!')
#Instantiate
logging.basicConfig(
level=level_mapping[config['log']['level']]
)
Таким образом, у вас есть белый список принятых уровней в вашем приложении.