Ответ 1
Вам не рекомендуется переопределять корневой регистратор так, как вы описываете. В общем случае вы должны использовать корневой журнал непосредственно для небольших скриптов - для больших приложений лучше всего использовать
logger = logging.getLogger(__name__)
в каждом модуле, где вы используете ведение журнала, а затем выполняете вызовы logger.info() и т.д.
Если все, что вы хотите сделать, это войти в файл, почему бы просто не добавить обработчик файла в корневой журнал? Вы можете использовать, например,
if __name__ == '__main__':
logging.basicConfig(filename='experimental.log', filemode='w')
main() # or whatever your main entry point is called
или через файл конфигурации.
Обновление: Когда я говорю "вы посоветованы", я имею в виду, я здесь, в этом ответе;-) Хотя вы не можете столкнуться с какими-либо проблемами в своем сценарии, это не хорошая практика для перезаписывания атрибута модуля, который не был предназначен для перезаписывания. Например, корневой регистратор представляет собой экземпляр другого класса (который не является частью общедоступного API), и есть другие ссылки на него в механизме регистрации, который все равно указывает на старое значение. Любой из этих фактов может привести к трудным для отладки проблемам. Поскольку пакет протоколирования позволяет реализовать несколько способов достижения желаемого результата (по-видимому, для входа в файл, а не в консоль), вы должны использовать предоставленные механизмы.