Позвольте мне ответить на мой собственный вопрос. Основная проблема заключается в том, что settings.py импортируется дважды, а может и больше (см. здесь ). (Я до сих пор не понимаю, почему это так. Может быть, какой-то эксперт по Django мог бы объяснить это мне.) Это также относится и к некоторым другим модулям. На данный момент я не думаю, что было бы разумно делать предположения о том, сколько раз будет импортирован settings.py. В этом отношении такие предположения не являются безопасными в целом. У меня был этот код в других местах, кроме settings.py, и результаты были похожи.
Вы должны кодировать это. То есть вы должны проверить свой регистратор на наличие существующих обработчиков, прежде чем добавлять к нему дополнительные обработчики. Это немного уродливо, потому что совершенно разумно иметь несколько обработчиков - даже одного типа - подключенных к одному регистратору. Есть несколько вариантов решения этой проблемы. Одним из них является проверка свойства handlers вашего объекта logger. Если вам нужен только один обработчик и ваша длина> 0, не добавляйте его. Лично я не люблю это решение, потому что оно запутывается с большим количеством обработчиков.
Я предпочитаю что-то вроде этого (спасибо Томасу Геттлеру):
# file logconfig.py
if not hasattr(logging, "set_up_done"):
logging.set_up_done=False
def set_up(myhome):
if logging.set_up_done:
return
# set up your logging here
# ...
logging.set_up_done=True
Должен сказать, я хочу, чтобы Django импортировал settings.py несколько раз, что было лучше задокументировано. И я бы предположил, что моя конфигурация как-то вызывает этот множественный импорт, но у меня возникают проблемы с выяснением того, что вызывает проблему и почему. Может быть, я просто не смог найти это в их документах, но я думаю, что именно об этом нужно предупреждать пользователей.