2013-02-25 3 views
2

Есть ли какая-то лучшая практика для интерполяции значений в сообщение журнала? Мой Google-фу не эффективен здесь, но я получаю примеры, как this, которые говорят:Правильный способ интерполяции значения на сообщение журнала

#Change all logging from this 

logger.warning("This is a %s" % var) 

#to 

logger.warning("This is a %s", var) 

как его лучшая практика все должны следовать. Есть ли причина? Будут ли отсутствовать значения var (например, объект класса)?

ответ

2

Используйте последний. Модуль регистрации только интерполирует значение при обработке сообщения.

Это означает, что вы сохраняете циклы процессора для отладочных сообщений, например, если уровень журнала исключает их.

Это отражено в logging HOWTO, "Optimization" chapter:

Форматирование сообщений аргументы откладывается до тех пор, пока не удастся избежать.

Возможно, вы захотите следовать остальным советам, приведенным в этой главе, чтобы избежать дорогостоящих вычислений только для ведения журнала.

Внутренний модуль logging использует первый вид, поэтому любое значение, которое невозможно преобразовать в строку, не будет выполнено.

1

Я думаю, что вторая форма лучше, потому что у регистратора есть шанс проверить, включен ли уровень warning, прежде чем делать замену.

Смежные вопросы