Я разрабатываю приложение Django, и я пытаюсь использовать модуль протоколирования Python для регистрации ошибок/трассировки. В идеале я хотел бы иметь разные регистраторы, настроенные для разных областей сайта. Пока у меня все это работает, но одно дело, что я почесываю голову.
У меня есть корневой журнал, отправляющийся в sys.stderr, и я настроил другой регистратор для записи в файл. Это находится в моем файле settings.py:
sviewlog = logging.getLogger('MyApp.views.scans')
view_log_handler = logging.FileHandler('C:\\MyApp\\logs\\scan_log.log')
view_log_handler.setLevel(logging.INFO)
view_log_handler.setFormatter(logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s'))
sviewlog.addHandler(view_log_handler)
Кажется довольно простым. Здесь проблема, хотя: то, что я пишу в sviewlog, дважды записывается в файл журнала. Корневой регистратор печатает только один раз. Это как addHandler() вызывается дважды. И когда я отправляю свой код через отладчик, это именно то, что я вижу. Код в settings.py выполняется дважды, поэтому два файла FileHandlers создаются и добавляются в один экземпляр журнала. Но почему? И как мне обойти это?
Может ли кто-нибудь сказать мне, что здесь происходит? Я попытался переместить код экземпляра loglog/обработчика sviewlog в файл, где он использовался (поскольку это на самом деле кажется подходящим для меня местом), но у меня такая же проблема. Большинство примеров, которые я видел в Интернете, используют только корневой журнал, и я предпочел бы иметь несколько регистраторов.