Класс WatchedFileHandler
- это обработчик похожий на стандартный обработчик FileHandler
, но следит за файлом, в который он выводит события. Если файл изменяется, то он закрывается и снова открывается с использованием старого имени файла.
Изменение файла может произойти из-за использования таких программ Unix как newsyslog
и logrotate
, которые выполняют ротацию файла журнала. Этот обработчик, предназначенный для использования в Unix/Linux
. Считается, что файл изменился, если изменилось его устройство или inode
. Если файл изменился, старый поток файлов закрывается и файл открывается для получения нового потока.
Этот обработчик не подходит для использования в Windows, поскольку в Windows, открытые файлы журналов нельзя перемещать или переименовывать - при ведении журнала файлы открываются с эксклюзивными блокировками - и поэтому такой обработчик не требуется.
from logging.handlers import WatchedFileHandler WatchedFileHandler(filename, mode='a', encoding=None, delay=False)
filename
- имя файла ведения журнала,mode='a'
- режим открытия файла,encoding=None
- кодировка файла,delay=False
- задержка открытия файла.WatchedFileHandler
.Функция logging.handlers.WatchedFileHandler()
возвращает новый экземпляр класса WatchedFileHandler
. Указанный файл filename
открывается и используется в качестве потока для ведения журнала.
mode
не указан, то используется 'a'
. encoding
не равна None
, то она используется для открытия файла. delay=True
, то открытие файла откладывается до первого вызова метода emit()
. По умолчанию файл растет бесконечно.
WatchedFileHandler
.reopenIfNeeded()
:Проверяет, изменился ли файл. Если это так, существующий поток сбрасывается и закрывается, а файл открывается снова, как правило, в качестве прекурсора для вывода записи в файл.
emit(record)
:Выводит record
в файл, но сначала вызывает метод reopenIfNeeded()
чтобы открыть файл, если он был изменен.