Ответ 1
Модуль logging
использует обработчики, подключенные к регистраторам, чтобы решить, как, где и даже если сообщения в конечном итоге будут сохранены или отображены. Вы можете настроить logging
по умолчанию для записи в файл. Вы действительно должны прочитать docs, но если вы вызываете logging.basicConfig(filename=log_file_name)
, где log_file_name
- это имя файла, на который вы хотите написать письма (обратите внимание, что у вас есть для этого, прежде чем что-либо еще в logging
будет вызвано вообще), тогда все сообщения, зарегистрированные во всех регистраторах (если некоторая дальнейшая реконфигурация не произойдет позже), будут там записаны. Знайте, на каком уровне установлен логгер; если память обслуживается, info
находится ниже уровня журнала по умолчанию, поэтому вам нужно включить level=logging.INFO
в аргументы в basicConfig
, а также для того, чтобы ваше сообщение попало в файл.
Что касается другой части вашего вопроса, logging.getLogger(some_string)
возвращает объект Logger
, вставленный в правильное положение в иерархии из корневого регистратора, с именем, являющимся значением some_string
. Вызывается без аргументов, он возвращает корневой журнал. __name__
возвращает имя текущего модуля, поэтому logging.getLogger(__name__)
возвращает объект Logger
с именем, установленным на имя текущего модуля. Это общий шаблон, используемый с logging
, поскольку он заставляет структуру журналов отражать структуру модуля кода, что часто делает сообщения протоколирования гораздо более полезными при отладке.