Я занимаюсь разработкой приложения 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 создаются и добавляются в один и тот же экземпляр регистратора. Но почему? И как мне обойти это?
Может кто-нибудь сказать мне, что здесь происходит? Я попытался переместить код создания логгера / обработчика sviewlog в файл, в котором он используется (так как это на самом деле кажется мне подходящим местом), но у меня там та же проблема. В большинстве примеров, которые я видел в Интернете, используется только корневой регистратор, и я предпочел бы иметь несколько регистраторов.