Я хочу получить все возможные текущие уровни журнала в приложении. Я использую стандартную библиотеку ведения журнала для python 2.7.
Что-то вроде:
logging.getLevels()
[DEBUG, INFO, WARNING, ERROR, CRITICAL]
Мой вариант использования для этого - передать его в argsparse. Мы определяем некоторые настраиваемые уровни журнала в нашем приложении, и было бы неплохо, если бы они автоматически переносились в argparse.
parser = argparse.ArgumentParser('our app')
parser.add_argument('-l', '--loglevel', type=str, help='Log level',
choices=logging.getLevels(), default='WARNING')
Я не могу найти такую функцию в документация. Ближайшее, что я могу найти, - это getLevelName (int level), который вернет строку на основе целого числа.
@ymbirtt А, это хорошая ссылка. Я искал, но этого не заметил ...
Следуя связанному с @ymbirtt вопросу, я решил следующее: Он вызывает _levelNames, а затем обходит его, получая только строковые ответы.
[v for (k,v) in logging._levelNames.iteritems() if type(k) is int]
В Python 3:
[v for (k,v) in logging._levelNames.items() if type(k) is int]
В готовом решении:
parser.add_argument('-l', '--loglevel', type=str, help='Log level',
choices=[v for (k,v) in logging._levelNames.iteritems() if type(k) is int],
default='WARNING')
Обновлено: замененное значение и ключ вокруг продолжают заказывать
Связанный, возможно, дублирующий: stackoverflow.com/questions/18846024/…, хотя он включает доступ к переменной подчеркивания, поэтому может быть не идеальным.