Содержание страницы
15.9. logging.handlers – Обработчики логирования¶logging.handlers – Logging handlers
В пакете предоставлены следующие полезные обработчики. Обратите внимание, что три из них (StreamHandler, FileHandler и NullHandler) на самом деле определены в самом модуле logging, но описаны здесь вместе с остальными обработчиками.
15.9.1. StreamHandler¶
Класс StreamHandler, расположенный в основном пакете logging, отправляет вывод логирования в такие потоки, как sys.stdout, sys.stderr или любой файлоподобный объект (или, точнее, любой объект, поддерживающий методы write() и flush()).
- class logging.StreamHandler(stream=None)¶
Возвращает новый экземпляр класса StreamHandler. Если указан параметр поток данных, экземпляр использует его для вывода логирования; в противном случае используется sys.stderr.
- emit(record)¶
Если указан форматтер, он форматирует запись. Затем запись записывается в поток с завершающим символом. Если присутствует информация об исключении, она форматируется с помощью traceback.print_exception() и добавляется в поток.
Изменено в версии 3.2: Класс StreamHandler теперь имеет атрибут terminator, значением по умолчанию которого является '\n'. Этот атрибут используется в качестве завершающего символа при записи форматированной записи в поток. Если вы не хотите такого завершения переводом строки, можно установить атрибут terminator экземпляра обработчика в пустую строку. В более ранних версиях завершитель был жёстко задан как '\n'.
15.9.2. FileHandler¶
Класс FileHandler, расположенный в основном пакете logging, отправляет вывод логирования в файл на диске. Он наследует функциональность вывода от StreamHandler.
- class logging.FileHandler(filename, mode='a', encoding=None, delay=False)¶
Возвращает новый экземпляр класса FileHandler. Указанный файл открывается и используется как поток для логирования. Если mode не указан, используется 'a'. Если encoding не равен None, файл открывается с указанной кодировкой. Если delay равен true, открытие файла откладывается до первого вызова emit(). По умолчанию файл растёт бесконечно.
- close()¶
Закрывает файл.
- emit(record)¶
Выводит запись в файл.
15.9.3. NullHandler¶
Новое в версии 3.1.
Класс NullHandler, расположенный в основном пакете logging, не выполняет никакого форматирования или вывода. По сути это обработчик-пустышка, предназначенный для разработчиков библиотек.
- class logging.NullHandler¶
Возвращает новый экземпляр класса NullHandler.
- emit(record)¶
Этот метод ничего не делает.
- handle(record)¶
Этот метод ничего не делает.
- createLock()¶
Этот метод возвращает None для блокировки, поскольку нет базового ввода-вывода, доступ к которому необходимо синхронизировать.
Смотрите Настройка логирования для библиотеки для получения дополнительной информации об использовании NullHandler.
15.9.4. WatchedFileHandler¶
The WatchedFileHandler class, located in the logging.handlers module, is a FileHandler which watches the file it is logging to. If the file changes, it is closed and reopened using the file name.
Файл может измениться из-за использования таких программ, как newsyslog и logrotate, которые выполняют ротацию файлов журнала. Этот обработчик, предназначенный для использования в Unix/Linux, следит, не изменился ли файл с момента последнего вызова emit. (Считается, что файл изменился, если изменились его устройство или inode.) Если файл изменился, старый поток файла закрывается, а файл открывается для получения нового потока.
Этот обработчик не подходит для использования в Windows, потому что в Windows открытые файлы журналов нельзя перемещать или переименовывать – логирование открывает файлы с эксклюзивными блокировками – поэтому такой обработчик не нужен. Кроме того, ST_INO не поддерживается в Windows; stat() всегда возвращает ноль для этого значения.
- class logging.handlers.WatchedFileHandler(filename[, mode[, encoding[, delay]]])¶
Возвращает новый экземпляр класса WatchedFileHandler. Указанный файл открывается и используется как поток для логирования. Если mode не указан, используется 'a'. Если encoding не равен None, файл открывается с указанной кодировкой. Если delay равен true, открытие файла откладывается до первого вызова emit(). По умолчанию файл растёт бесконечно.
- emit(record)¶
Выводит запись в файл, но сначала проверяет, изменился ли файл. Если изменился, существующий поток сбрасывается и закрывается, а файл открывается заново, после чего запись выводится в файл.
15.9.5. RotatingFileHandler¶
Класс RotatingFileHandler, расположенный в модуле logging.handlers, поддерживает ротацию файлов журнала на диске.
- class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)¶
Возвращает новый экземпляр класса RotatingFileHandler. Указанный файл открывается и используется как поток для журналирования. Если mode не указан, используется 'a'. Если encoding не равен None, файл открывается с указанной кодировкой. Если delay равен истине, открытие файла откладывается до первого вызова emit(). По умолчанию файл растёт бесконечно.
Значения maxBytes и backupCount позволяют задать размер, при котором файл переключается. Когда размер почти превышен, файл закрывается и новый файл открывается для записи. Переключение происходит, когда текущий файл журнала приближается к длине maxBytes; если maxBytes равно нулю, переключение никогда не происходит. Если backupCount не равно нулю, система сохраняет старые файлы журнала, добавляя к имени файла расширения ‘.1’, ‘.2’ и т.д. Например, при backupCount равном 5 и базовом имени файла app.log, будут получены app.log, app.log.1, app.log.2, вплоть до app.log.5. Файл, в который ведется запись, всегда app.log. Когда этот файл заполняется, он закрывается и переименовывается в app.log.1, а если файлы app.log.1, app.log.2 и т.д. существуют, они переименовываются в app.log.2, app.log.3 и т.д. соответственно.
- doRollover()¶
Выполняет ротацию, как описано выше.
- emit(record)¶
Записывает запись (record) в файл, выполняя при необходимости ротацию, как описано ранее.
15.9.6. TimedRotatingFileHandler¶
Класс TimedRotatingFileHandler, расположенный в модуле logging.handlers, поддерживает ротацию файлов журнала на диске через заданные интервалы времени.
- class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)¶
Возвращает новый экземпляр класса TimedRotatingFileHandler. Указанный файл открывается и используется как поток для журналирования. При ротации также устанавливается суффикс имени файла. Ротация происходит на основе произведения when и interval.
Параметр when указывает тип interval. Список возможных значений приведён ниже. Обратите внимание, что регистр не учитывается.
Значение Тип интервала 'S' Секунды 'M' Минуты 'H' Часы 'D' Дни 'W0'-'W6' День недели (0=понедельник) 'midnight' Переключение в полночь При использовании ротации по дням недели укажите 'W0' для понедельника, 'W1' для вторника и так далее до 'W6' для воскресенья. В этом случае значение, переданное для interval, не используется.
Система будет сохранять старые файлы журнала, добавляя расширения к имени файла. Расширения основаны на дате и времени, с использованием формата strftime %Y-%m-%d_%H-%M-%S или его начальной части, в зависимости от интервала ротации.
При первом вычислении времени следующей ротации (при создании обработчика) используется время последнего изменения существующего файла журнала или, в противном случае, текущее время, чтобы определить, когда произойдёт следующая ротация.
Если аргумент utc равен true, используется время в UTC; в противном случае используется местное время.
Если backupCount не равен нулю, сохраняется не более backupCount файлов; если при ротации должно быть создано больше файлов, самый старый удаляется. Логика удаления использует интервал для определения того, какие файлы нужно удалить, поэтому изменение интервала может привести к тому, что старые файлы останутся.
Если delay равен true, открытие файла откладывается до первого вызова emit().
- doRollover()¶
Выполняет ротацию, как описано выше.
- emit(record)¶
Выводит запись в файл, обеспечивая ротацию, как описано выше.
15.9.7. SocketHandler¶
Класс SocketHandler, находящийся в модуле logging.handlers, отправляет вывод журнала в сетевой сокет. Базовый класс использует TCP-сокет.
- class logging.handlers.SocketHandler(host, port)¶
Возвращает новый экземпляр класса SocketHandler, предназначенного для взаимодействия с удаленной машиной, адрес которой задается host и port.
- close()¶
Закрывает сокет.
- emit()¶
Сериализует словарь атрибутов записи и записывает его в сокет в бинарном формате. Если при работе с сокетом возникает ошибка, пакет молча отбрасывается. Если соединение было ранее потеряно, оно восстанавливается. Для десериализации записи на принимающей стороне в LogRecord используйте функцию makeLogRecord().
- handleError()¶
Обрабатывает ошибку, возникшую во время emit(). Наиболее вероятная причина – потеря соединения. Закрывает сокет, чтобы можно было повторить попытку при следующем событии.
- makeSocket()¶
Это фабричный метод, позволяющий подклассам определять точный тип сокета, который они хотят. Реализация по умолчанию создает TCP-сокет (socket.SOCK_STREAM).
- makePickle(record)¶
Сериализует словарь атрибутов записи в двоичном формате с префиксом длины и возвращает его готовым к передаче через сокет.
Обратите внимание, что модуль pickle не является полностью безопасным. Если вас беспокоит безопасность, вы можете переопределить этот метод, чтобы реализовать более надёжный механизм. Например, можно подписывать данные с помощью HMAC и проверять подпись на принимающей стороне, либо отключить десериализацию глобальных объектов на принимающей стороне.
- send(packet)¶
Отправляет сериализованную с помощью pickle строку packet в сокет. Эта функция допускает частичную отправку, которая может произойти, когда сеть занята.
- createSocket()¶
Пытается создать сокет; в случае неудачи использует алгоритм экспоненциальной задержки. При первоначальном сбое обработчик отбрасывает сообщение, которое пытался отправить. Когда последующие сообщения обрабатываются тем же экземпляром, он не будет пытаться подключиться, пока не пройдет некоторое время. Параметры по умолчанию таковы, что начальная задержка составляет одну секунду, и если после этой задержки соединение всё ещё не может быть установлено, обработчик будет каждый раз удваивать задержку вплоть до максимума в 30 секунд.
Это поведение управляется следующими атрибутами обработчика:
- retryStart (начальная задержка, по умолчанию 1.0 секунды).
- retryFactor (множитель, по умолчанию 2.0).
- retryMax (максимальная задержка, по умолчанию 30.0 секунд).
Это означает, что если удалённый слушатель запускается после того, как обработчик уже использовался, возможна потеря сообщений (поскольку обработчик даже не будет пытаться установить соединение, пока не истечёт задержка, а будет просто молча отбрасывать сообщения в течение этого периода).
15.9.8. DatagramHandler¶
Класс DatagramHandler, находящийся в модуле logging.handlers, наследует от SocketHandler для поддержки отправки сообщений журнала через UDP-сокеты.
- class logging.handlers.DatagramHandler(host, port)¶
Возвращает новый экземпляр класса DatagramHandler, предназначенного для взаимодействия с удаленной машиной, адрес которой задается host и port.
- emit()¶
Сериализует словарь атрибутов записи и записывает его в сокет в бинарном формате. Если при работе с сокетом возникает ошибка, пакет молча отбрасывается. Для десериализации записи на принимающей стороне в LogRecord используйте функцию makeLogRecord().
- makeSocket()¶
Фабричный метод SocketHandler здесь переопределен для создания UDP-сокета (socket.SOCK_DGRAM).
- send(s)¶
Отправляет сериализованную с помощью pickle строку в сокет.
15.9.9. SysLogHandler¶
Класс SysLogHandler, расположенный в модуле logging.handlers, поддерживает отправку сообщений журнала на удалённый или локальный syslog Unix.
- class logging.handlers.SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)¶
Возвращает новый экземпляр класса SysLogHandler, предназначенного для взаимодействия с удалённой Unix-машиной, чей адрес задаётся address в виде кортежа (host, port). Если address не указан, используется ('localhost', 514). Адрес используется для открытия сокета. Альтернативой предоставлению кортежа (host, port) является передача адреса в виде строки, например ‘/dev/log’. В этом случае для отправки сообщения syslog используется сокет домена Unix. Если facility не указан, используется LOG_USER. Тип открываемого сокета зависит от аргумента socktype, который по умолчанию равен socket.SOCK_DGRAM и, таким образом, открывает UDP-сокет. Чтобы открыть TCP-сокет (для использования с более новыми демонами syslog, такими как rsyslog), укажите значение socket.SOCK_STREAM.
Обратите внимание: если ваш сервер не слушает UDP-порт 514, SysLogHandler может не работать. В этом случае проверьте, какой адрес следует использовать для сокета домена – это зависит от системы. Например, в Linux это обычно ‘/dev/log’, а в OS/X – ‘/var/run/syslog’. Вам нужно проверить свою платформу и использовать соответствующий адрес (возможно, придётся делать эту проверку во время выполнения, если приложение должно работать на нескольких платформах). В Windows практически приходится использовать опцию UDP.
Изменено в версии 3.2: socktype был добавлен.
- close()¶
Закрывает сокет, подключённый к удалённому узлу.
- emit(record)¶
Запись форматируется и отправляется на сервер syslog. Если присутствует информация об исключении, она не отправляется на сервер.
Изменено в версии 3.2.1: (См.: issue 12168.) В более ранних версиях сообщение, отправляемое демонам syslog, всегда завершалось нулевым байтом, поскольку ранние версии этих демонов ожидали сообщение с нулевым завершителем – хотя это и не соответствует соответствующей спецификации (RF 5424). Более новые версии этих демонов не ожидают нулевого байта, но удаляют его, если он есть, а ещё более новые демоны (которые строже следуют RFC 5424) передают нулевой байт как часть сообщения.
Чтобы упростить обработку сообщений syslog в условиях столь разного поведения демонов, добавление NUL-байта было сделано настраиваемым с помощью атрибута уровня класса append_nul. По умолчанию он равен True (сохраняя существующее поведение), но может быть установлен в False на экземпляре SysLogHandler, чтобы этот экземпляр не добавлял завершающий NUL.
- encodePriority(facility, priority)¶
Кодирует средство и приоритет в целое число. Можно передавать строки или целые числа – если передаются строки, внутренние словари сопоставлений используются для преобразования их в целые числа.
Символические значения LOG_ определены в SysLogHandler и соответствуют значениям, определённым в заголовочном файле sys/syslog.h.
Приоритеты
Имя (строка) Символическое значение alert LOG_ALERT crit или critical LOG_CRIT отладка LOG_DEBUG аварийная или паника LOG_EMERG ошибка или ошибка LOG_ERR информация LOG_INFO уведомление LOG_NOTICE предупреждение или предупреждение LOG_WARNING Средства
Имя (строка) Символическое значение аутентификация LOG_AUTH authpriv LOG_AUTHPRIV cron LOG_CRON демон LOG_DAEMON ftp LOG_FTP ядро LOG_KERN lpr LOG_LPR почта LOG_MAIL новости LOG_NEWS syslog LOG_SYSLOG user LOG_USER uucp LOG_UUCP local0 LOG_LOCAL0 local1 LOG_LOCAL1 local2 LOG_LOCAL2 local3 LOG_LOCAL3 local4 LOG_LOCAL4 local5 LOG_LOCAL5 local6 LOG_LOCAL6 local7 LOG_LOCAL7
- mapPriority(levelname)¶
Сопоставляет имя уровня логирования с именем приоритета syslog. Возможно, потребуется переопределить это, если используются пользовательские уровни, или если алгоритм по умолчанию не подходит. Алгоритм по умолчанию сопоставляет DEBUG, INFO, WARNING, ERROR и CRITICAL с соответствующими именами syslog, а все остальные уровни сопоставляет с 'warning'.
15.9.10. NTEventLogHandler¶
Класс NTEventLogHandler, расположенный в модуле logging.handlers модуле, поддерживает отправку сообщений логирования в журнал событий локальной системы Windows NT, Windows 2000 или Windows XP. Перед использованием необходимо установить расширения Win32 для Python от Mark Hammond.
- class logging.handlers.NTEventLogHandler(appname, dllname=None, logtype='Application')¶
Возвращает новый экземпляр класса NTEventLogHandler. Параметр appname используется для определения имени приложения, отображаемого в журнале событий. С использованием этого имени создается соответствующая запись реестра. Параметр dllname должен содержать полный путь к .dll или .exe-файлу с определениями сообщений для хранения в журнале (если не указан, используется 'win32service.pyd' – он устанавливается вместе с расширениями Win32 и содержит несколько базовых определений сообщений-заполнителей. Обратите внимание, что использование этих заполнителей приведет к увеличению размера журнала, так как весь источник сообщений хранится в журнале. Если нужны более компактные журналы, следует передать имя собственного .dll или .exe, содержащего нужные определения сообщений). Параметр logtype может быть одним из 'Application', 'System' или 'Security', по умолчанию 'Application'.
- close()¶
На этом этапе можно удалить имя приложения из реестра как источник записей журнала событий. Однако после этого события не будут отображаться в средстве просмотра журнала событий так, как предполагалось – для получения имени .dll требуется доступ к реестру. Текущая версия этого не делает.
- emit(record)¶
Определяет идентификатор сообщения, категорию и тип события, а затем записывает сообщение в журнал событий NT.
- getEventCategory(record)¶
Возвращает категорию события для записи. Переопределите этот метод, чтобы указать собственные категории. Данная версия возвращает 0.
- getEventType(record)¶
Возвращает тип события для записи. Переопределите этот метод, если нужно задать собственные типы. В данной версии используется сопоставление через атрибут typemap обработчика, который устанавливается в __init__() в виде словаря, содержащего сопоставления для DEBUG, INFO, WARNING, ERROR и CRITICAL. При использовании собственных уровней потребуется либо переопределить этот метод, либо поместить подходящий словарь в атрибут typemap обработчика.
- getMessageID(record)¶
Возвращает идентификатор сообщения для записи. При использовании собственных сообщений можно передать в логгер идентификатор msg вместо строки форматирования. Затем здесь можно выполнить поиск по словарю для получения идентификатора сообщения. Данная версия возвращает 1 – базовый идентификатор сообщения в win32service.pyd.
15.9.11. SMTPHandler¶
Класс SMTPHandler, расположенный в модуле logging.handlers, поддерживает отправку сообщений логирования на адрес электронной почты через SMTP.
- class logging.handlers.SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None)¶
Возвращает новый экземпляр класса SMTPHandler. Экземпляр инициализируется адресами отправителя, получателя и темой письма. Параметр toaddrs должен быть списком строк. Для указания нестандартного порта SMTP используется кортеж (host, port) в аргументе mailhost. Если передана строка, используется стандартный порт SMTP. Если SMTP-сервер требует аутентификации, можно указать кортеж (username, password) в аргументе credentials.
Для использования защищенного протокола (TLS) передайте кортеж в аргумент secure. Это будет работать только при наличии учетных данных для аутентификации. Кортеж должен быть либо пустым, либо содержать один элемент – имя файла ключа, либо два элемента – имена файла ключа и сертификата. (Этот кортеж передается методу smtplib.SMTP.starttls().)
- emit(record)¶
Форматирует запись и отправляет её указанным получателям.
- getSubject(record)¶
Чтобы задать тему письма, зависящую от записи, переопределите этот метод.
15.9.12. MemoryHandler¶
Класс MemoryHandler, расположенный в модуле logging.handlers, поддерживает буферизацию записей логирования в памяти с периодической отправкой в целевой обработчик target. Сброс происходит, когда буфер заполнен или когда встречается событие определенного уровня серьезности или выше.
MemoryHandler является подклассом более общего BufferingHandler, который является абстрактным классом. Он буферизует записи логирования в памяти. При добавлении каждой записи в буфер вызывается shouldFlush() для проверки необходимости сброса. Если сброс требуется, то ожидается, что flush() выполнит сброс.
- class logging.handlers.BufferingHandler(capacity)¶
Инициализирует обработчик буфером указанной ёмкости.
- emit(record)¶
Добавляет запись в буфер. Если shouldFlush() возвращает true, вызывает flush() для обработки буфера.
- flush()¶
Вы можете переопределить этот метод, чтобы задать собственное поведение при сбросе. Текущая версия просто очищает буфер.
- shouldFlush(record)¶
Возвращает true, если буфер заполнен до ёмкости. Этот метод можно переопределить для реализации собственных стратегий сброса.
- class logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None)¶
Возвращает новый экземпляр класса MemoryHandler. Экземпляр инициализируется с размером буфера capacity. Если flushLevel не указан, используется ERROR. Если target не указан, перед тем как обработчик начнёт работать, цель нужно задать с помощью setTarget().
- flush()¶
Для MemoryHandler сброс означает просто отправку буферизованных записей целевому обработчику, если он есть. Буфер также очищается, когда это происходит. Переопределите, если нужно иное поведение.
- setTarget(target)¶
Устанавливает целевой обработчик для данного обработчика.
- shouldFlush(record)¶
Проверяет, заполнен ли буфер или поступила запись уровня flushLevel или выше.
15.9.13. HTTPHandler¶
Класс HTTPHandler, расположенный в модуле logging.handlers, поддерживает отправку сообщений журнала на веб-сервер с использованием семантики GET или POST.
- class logging.handlers.HTTPHandler(host, url, method='GET', secure=False, credentials=None)¶
Возвращает новый экземпляр класса HTTPHandler. Параметр host может быть задан в формате host:port, если нужно указать конкретный номер порта. Если method не указан, используется GET. Если secure равно True, будет использоваться HTTPS- соединение. Если указан credentials, это должен быть кортеж из двух элементов: идентификатора пользователя и пароля. Они помещаются в HTTP- заголовок ‘Authorization’ с использованием базовой аутентификации. При указании credentials также следует установить secure=True, чтобы идентификатор пользователя и пароль не передавались по сети в открытом виде.
- emit(record)¶
Отправляет запись на веб-сервер в виде словаря в процентной кодировке.
15.9.14. QueueHandler¶
Новое в версии 3.2.
Класс QueueHandler, расположенный в модуле logging.handlers, поддерживает отправку сообщений журнала в очередь, например, реализованную в модулях queue или multiprocessing.
Вместе с классом QueueListener QueueHandler можно использовать, чтобы обработчики выполняли свою работу в отдельном потоке, отличном от того, который ведёт журналирование. Это важно в веб-приложениях и других служебных приложениях, где потоки, обслуживающие клиентов, должны отвечать как можно быстрее, в то время как потенциально медленные операции (например, отправка электронной почты через SMTPHandler) выполняются в отдельном потоке.
- class logging.handlers.QueueHandler(queue)¶
Возвращает новый экземпляр класса QueueHandler. Экземпляр инициализируется очередью для отправки сообщений. Очередью может быть любой объект, похожий на очередь; он используется как есть методом enqueue(), который должен знать, как отправлять в неё сообщения.
- emit(record)¶
Помещает в очередь результат подготовки LogRecord.
- prepare(record)¶
Подготавливает запись для помещения в очередь. Объект, возвращаемый этим методом, помещается в очередь.
Базовая реализация форматирует запись, объединяя сообщение и аргументы, и удаляет несериализуемые элементы из записи на месте.
Этот метод можно переопределить, если требуется преобразовать запись в словарь или JSON-строку, или отправить изменённую копию записи, оставив оригинал нетронутым.
- enqueue(record)¶
Помещает запись в очередь с помощью put_nowait(); возможно, потребуется переопределить этот метод, если нужно использовать блокирующее поведение, тайм-аут или нестандартную реализацию очереди.
15.9.15. QueueListener¶
Новое в версии 3.2.
Класс QueueListener, расположенный в модуле logging.handlers , поддерживает получение сообщений журнала из очереди, например, реализованной в модулях queue или multiprocessing. Сообщения получаются из очереди во внутреннем потоке и передаются, в том же потоке, одному или нескольким обработчикам для обработки. Хотя QueueListener сам по себе не является обработчиком, он документирован здесь, поскольку работает в тесной связке с QueueHandler.
Вместе с классом QueueHandler QueueListener можно использовать, чтобы обработчики выполняли свою работу в отдельном потоке, отличном от того, который ведёт журналирование. Это важно в веб-приложениях и других служебных приложениях, где потоки, обслуживающие клиентов, должны отвечать как можно быстрее, в то время как потенциально медленные операции (например, отправка электронной почты через SMTPHandler) выполняются в отдельном потоке.
- class logging.handlers.QueueListener(queue, *handlers)¶
Возвращает новый экземпляр класса QueueListener. Экземпляр инициализируется очередью для отправки сообщений и списком обработчиков, которые будут обрабатывать записи, помещенные в очередь. Очередью может быть любой объект, похожий на очередь; он передается как есть методу dequeue(), который должен знать, как получать из неё сообщения.
- dequeue(block)¶
Извлекает запись из очереди и возвращает её, опционально блокируя.
Базовая реализация использует get(). Возможно, потребуется переопределить этот метод, если нужно использовать тайм-ауты или работать с нестандартными реализациями очередей.
- prepare(record)¶
Подготавливает запись к обработке.
Эта реализация просто возвращает переданную запись. Можно переопределить этот метод, если требуется выполнить какую-либо собственную маршалинг или манипуляцию записью перед передачей обработчикам.
- handle(record)¶
Обрабатывает запись.
Этот метод просто перебирает обработчики, предлагая им запись для обработки. Объект, фактически передаваемый обработчикам, – это тот, который возвращается из prepare().
- start()¶
Запускает прослушиватель.
Запускает фоновый поток для отслеживания очереди на предмет LogRecords, которые нужно обработать.
- stop()¶
Останавливает прослушиватель.
Запрашивает завершение потока и затем ожидает его завершения. Обратите внимание: если не вызвать этот метод до завершения приложения, в очереди могут остаться некоторые записи, которые не будут обработаны.
См. также
- Модуль logging
- Справочник API для модуля logging.
- Модуль logging.config
- API конфигурации для модуля logging.