Когда я впервые узнал Python, я привык делать это:Почему пакет протоколов python не поддерживает аргументы переменной длины переменной?
print "text", lineNumber, "some dictionary", my_dict
Когда я писал свое собственное средство протоколирования, я, естественно, хотел быть в состоянии передать ему произвольно размерный список элементов, так что я сделал это:
def error(*args):
print ERR_PREFIX,
for _x in args:
print _x,
print "\r\n",
error("text", lineNumber, "some dictionary", my_dict)
Теперь я хочу, чтобы начать использовать пакет протоколирования, поскольку он имеет гораздо больше положительных героев, и я не чувствую, как тиражирование их усилия. В целом это выглядит как чистый дизайн, который может многое сделать. Но меня смущает тот факт, что вы больше не можете представить его с тем же списком элементов для печати. Вместо этого я должен изменить все мои звонки на что-то больше, как это:
error("text %d some dictionary %s" % (lineNumber, my_dict))
Или, я мог бы сделать что-то действительно глупо, как это:
error(' '.join(map, str(("text", lineNumber, "some dictionary", my_dict))))
Вопрос в том, почему пропускаются такой очевидный случай использования ? Если вы хотите перейти от типичного заявления «распечатать» прямо к новомодному каротажу, разве это не должно быть проще?
В качестве последующего вопроса вы можете придумать способ переопределить класс Logger для его выполнения?
Обратите внимание, что если вы хотите применить это к регистратору, кроме RootLogger, то вам нужно поставить самозапуск аргумент:. журнала = logging.getLogger («войти») журнала .makeRecord = lambda self, * args: ExtendedLogRecord (self, * args) – Brian