Сообщить об ошибке.

Класс WatchedFileHandler() модуля logging.handlers в Python.

Использование модуля logging с программой linux logrotate.

Класс 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() чтобы открыть файл, если он был изменен.