logging.handlers — Обработчики журналирования

Исходный код: Lib/logging/handlers.py


В пакете представлены следующие полезные обработчики. Обратите внимание, что три из обработчиков (StreamHandler, FileHandler и NullHandler) фактически определены в самом модуле logging, но задокументированы здесь вместе с другими обработчиками.

StreamHandler

Класс StreamHandler, расположенный в основном пакете logging, посылает вывод логирования в потоки, такие как sys.stdout, sys.stderr или любой подобный файлу объект (или, более точно, любой объект, который поддерживает write() и методы flush()).

class logging.StreamHandler(stream=None)

Возвращает новую сущность класса StreamHandler. Если stream указано, то сущность будет использовать его для вывода логирование; в противном случае sys.stderr будет использоваться.

emit(record)

Если указан форматер, использовать форматированную запись. Запись затем записывается в поток с завершителем. Если информация об исключении присутствует, она форматируется с помощью traceback.print_exception() и добавляется к потоку.

flush()

Очищает поток путем вызова метода flush(). Обратите внимание, что метод close() наследуется от Handler и поэтому не выводит, поэтому иногда может потребоваться явный вызов flush().

setStream(stream)

Устанавливает поток сущность в указанный значение, если это отличается. Старый поток очищается перед установкой нового потока.

Параметры:stream – Поток, который должен использовать обработчик.
Результат:Старый поток, если поток был изменен, или None если это не так.

Добавлено в версии 3.7.

Изменено в версии 3.2: У класса StreamHandler теперь есть terminator атрибут, значение '\n' по умолчанию, который является используемый как завершитель, в записываемом отформатированном отчете потоку. Если вы не хотите это newline завершение, вы можете установить сущность terminator атрибут обработчик в пустой строка. В более ранних версиях завершитель был закодирован как '\n'.

FileHandler

Класс FileHandler, расположенный в основном пакете logging, посылает вывод логирования в дисковый файл. Он наследует функцию вывода от StreamHandler.

class logging.FileHandler(filename, mode='a', encoding=None, delay=False)

Возвращает новую сущность класса FileHandler. Указанный файл открывается и используемый как поток для логирования. Если mode не указан, то 'a' является используемый. Если encoding не является None, используемый открыть файл с этим кодировка. Если delay верен, то открытие файла отсрочено до первого требования к emit(). По умолчанию файл растет бесконечно.

Изменено в версии 3.6: Как и строка значения, Path объекты также принимаются для аргумента filename.

close()

Закрывает файл.

emit(record)

Вывод записи в файл.

NullHandler

Добавлено в версии 3.1.

Класс NullHandler, расположенный в основном пакете logging, не делает никакого форматирования или вывода. Это по существу обработчик „заглушка“ для использования разработчиками библиотек.

class logging.NullHandler

Возвращает новую сущность класса NullHandler.

emit(record)

Этот метод ничего не делает.

handle(record)

Этот метод ничего не делает.

createLock()

Этот возвращает None метода для блокировки, с тех пор есть не основной I/O, к которому должен быть преобразован в последовательную форму доступ.

Дополнительные сведения об использовании Настройка логирования для библиотеки см. в разделе NullHandler.

WatchedFileHandler

Класс WatchedFileHandler, расположенный в модуле logging.handlers, является FileHandler, который смотрит файл, к которому он является логирование. Если файл изменяется, он закрывается и открывается повторно с использованием имени файла.

Изменение файла может произойти из-за использования таких программ, как newsyslog и logrotate, которые выполняют ротацию файла журнала. Этот обработчик, предназначенный для использования в Unix/Linux, просматривает файл, чтобы узнать, изменился ли он с момента последнего выпуска. (Файл считается измененным, если его устройство или inode изменились.) если файл изменился, старый поток файлов закрывается, и файл открывается для получения нового потока.

Этот обработчик не подходит для использования в Windows, так как в Windows открытые файлы журнала не могут быть перемещены или переименованы - логирование открывает файлы с эксклюзивными блокировками - и поэтому нет необходимости в такой обработчик. Кроме того, ST_INO не поддерживается в Windows; stat() всегда возвращает ноль для этого значения.

class logging.handlers.WatchedFileHandler(filename, mode='a', encoding=None, delay=False)

Возвращает новую сущность класса WatchedFileHandler. Указанный файл открывается и используемый как поток для логирование. Если mode не указан, то 'a' является используемый. Если encoding не является None, используемый открыть файл с этим кодировка. Если delay верен, то открытие файла отсрочено до первого требования к emit(). По умолчанию файл растет бесконечно.

Изменено в версии 3.6: Как и строка значения, Path объекты также принимаются для аргумента filename.

reopenIfNeeded()

Проверяет, изменился ли файл. Если он есть, существующий поток очищается и закрывается, и файл открывается снова, как правило, в качестве предшественника для вывода записи в файл.

Добавлено в версии 3.6.

emit(record)

Выводит запись в файл, но сначала вызывает reopenIfNeeded() для повторного открытия файла, если он изменился.

BaseRotatingHandler

Класс BaseRotatingHandler, расположенный в модуле logging.handlers, является базовым классом для вращающихся файлов обработчики, RotatingFileHandler и TimedRotatingFileHandler. Не нужно создавать экземпляр этого класса, но он содержит атрибуты и методы, которые, возможно, потребуется переопределить.

class logging.handlers.BaseRotatingHandler(filename, mode, encoding=None, delay=False)

Параметры соответствуют параметрам FileHandler. К числу атрибуты относятся:

namer

Если для этого атрибута установлено значение вызываемое, то translation_filename() метод делегирует этот вызываемый. Параметры, передаваемые в вызываемую те, которые передаются в rotation_filename()

Примечание

Функция именования вызывается довольно много раз во время ролловера, поэтому она должна быть как можно более простой и быстрой. Это должно также возвращает тот же вывод каждый раз для данного входа, иначе поведение одновременного нажатия клавиш может не работать как ожидалось.

Добавлено в версии 3.3.

rotator

Если для этого атрибута установлено значение вызываемое, метод rotate() делегаты на этот вызов. Параметры, передаваемые в вызываемую те, что переданы rotate().

Добавлено в версии 3.3.

rotation_filename(default_name)

Измените имени файла журнала при ротации.

Это обеспечивает возможность предоставления пользовательского имени файла.

Реализация по умолчанию вызывает атрибут „namer“ обработчик, если он является вызываемым, передавая ему имя по умолчанию. Если атрибут не подлежащий выкупу (дефолт - None), имя возвращенный неизменный.

: param default_name: имя файла журнала по умолчанию.

Добавлено в версии 3.3.

rotate(source, dest)

При ротации, ротировать текущий журнал.

Реализация по умолчанию вызывает атрибут rotator обработчик, если он является вызываемым, передавая ему аргументы source и dest. Если атрибут не подлежащий выкупу (дефолт - None), источник просто переименован к месту назначения.

: param source: имя исходного файла. Обычно это основное имя файла, например «test.log».: param dest: имя файла назначения. Как правило, источник поворачивается, например «test.log.1».

Добавлено в версии 3.3.

Причина атрибуты существуют, состоит в том, чтобы спасти вас имеющий необходимость к подкласс - вы можете использовать тот же вызываемый для сущности RotatingFileHandler и TimedRotatingFileHandler. Если вызываемый модуль namer или rotator вызывает исключение, оно будет обрабатываться таким же образом, как и любое другое исключение во время вызова emit(), т.е. с помощью метода обработчика handleError().

Если необходимо внести более существенные изменения в обработку ротации, можно переопределить методами.

Пример см. в разделе Использование ротатора и имени для настройки обработки ротации журнала.

RotatingFileHandler

Класс RotatingFileHandler, расположенный в модуле logging.handlers, поддерживает ротацию файлов журнала диска.

class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)

Возвращает новую сущность класса RotatingFileHandler. Указанный файл открывается и используемый как поток для логирование. Если mode не указан, то 'a' является используемый. Если encoding не является None, используемый открыть файл с этим кодировка. Если delay верен, то открытие файла отсрочено до первого требования к emit(). По умолчанию файл растет бесконечно.

Можно использовать maxBytes и backupCount значения, чтобы разрешить rollover файла с заданным размером. Когда размер будет превышен, файл закрывается, и новый файл открывается для вывода. Ролловер происходит всякий раз, когда текущий файл журнала имеет почти maxBytes длину; но если или maxBytes или backupCount ноль, одновременное нажатие клавиш никогда не происходит, таким образом, вы обычно хотите установить backupCount по крайней мере в 1 и иметь отличный от нуля 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 и т.д. соответственно.

Изменено в версии 3.6: Как и строка значения, Path объекты также принимаются для аргумента filename.

doRollover()

Выполняет ролловер, как описано выше.

emit(record)

Вывод записи в файл, обеспечивающий ролловер, как описано выше.

TimedRotatingFileHandler

Класс TimedRotatingFileHandler, расположенный в модуле logging.handlers, поддерживает ротацию файлов журнала диска через определенные промежутки времени.

class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)

Возвращает новую сущность класса TimedRotatingFileHandler. Указанный файл открывается и используемый как поток для логирование. При ротации он также задает суффикс имени файла. Ротация происходит на основе вывода when и interval.

when можно использовать для определения типа interval. Список возможного значения ниже. Обратите внимание, что они не чувствительны к регистру.

Значение Тип интервала Если/как atTime используется
'S' Секунды Игнорируется
'M' Минуты Игнорируется
'H' Часы Игнорируется
'D' Дни Игнорируется
'W0'-'W6' День недели (0=Понедельник) Используется для вычисления rначального времени ролловера
'midnight' Перевернуть в полночь, если atTime не указано, в другое время atTime Используется для вычисления начального времени ролловера

При использовании ротации на основе дня недели укажите „W0“ для понедельника, „W1“ для вторника и так далее до „W6“ для воскресенья. В этом случае значение, переданный для interval, не является используемый.

Система сохранит старые файлы журнала, добавив расширения к имени файла. Расширения основаны на дате и времени, используя формат strftime %Y-%m-%d_%H-%M-%S или его начальную часть, в зависимости от интервала 'midnight'.

Вычисляя в следующий раз одновременного нажатия клавиш впервые (когда обработчик создан), прошлый раз модификации существующего файла системного журнала, или иначе текущее время, является используемый, чтобы вычислить, когда произойдет следующая ротация.

Если аргумент utc имеет значение true, время в UTC будет равно используемый; в противном случае локальная время является используемый.

Если значение backupCount не равно нулю, то сохраняются максимум файлы backupCount, и если при ролловер будет создано больше файлов, удаляется самый старый файл. Логика удаления использует интервал, чтобы определить, какие файлы следует удалить, поэтому изменение интервала может оставить старые файлы лежать рядом.

Если delay верен, то открытие файла отсрочено до первого требования к emit().

Если atTime не None, это должен быть datetime.time сущность, который определяет время суток, когда одновременное нажатие клавиш происходит для случаев, где одновременное нажатие клавиш собирается произойти «в полночь» или «в особый рабочий день». Обратите внимание, что в этих случаях, atTime значение - эффективно используемый, чтобы вычислить одновременное нажатие клавиш initial, и последующие одновременные нажатия клавиш были бы вычислены через нормальное вычисление интервала.

Примечание

Расчет начального времени ролловера выполняется при выполнении обработчиком инициализирован. Расчет последующих времен ролловер выполняется только при ролловер, а ролловер происходит только при выдаче выходных данных. Если это не учитывать, это может привести к некоторой путанице. Например, если установлен интервал «каждая минута», это не означает, что файлы журнала всегда будут отображаться с временем (в имени файла), разделенным минутой; если во время выполнения приложения выходные данные логирование генерируются чаще, чем один раз в минуту, then можно ожидать, что файлы журнала будут отображаться со временем, разделенным минутой. Если, с другой стороны, сообщения логирование выводятся только один раз в пять минут (скажем), то будут иметь место промежутки во времени файла, соответствующие минутам, где не было вывода (и, следовательно, не было ролловера).

Изменено в версии 3.4: atTime добавлен параметр.

Изменено в версии 3.6: Как и строка значения, Path объекты также принимаются для аргумента filename.

doRollover()

Выполняет ролловер, как описано выше.

emit(record)

Вывод записи в файл, обеспечивающий ролловер, как описано выше.

SocketHandler

Класс SocketHandler, расположенный в модуле logging.handlers, посылает вывод логирование в сеть сокет. Базовый класс использует TCP сокет.

class logging.handlers.SocketHandler(host, port)

Возвращает новую сущность класса SocketHandler, предназначенный для связи с удаленным компьютером, адрес которого определяется host и port.

Изменено в версии 3.4: Если port определен как None, область Unix, сокет создан, используя значение в host - иначе, TCP сокет создан.

close()

Закрывает сокет.

emit()

Подсвечивает словарь атрибут записи и записывает его в сокет в двоичном формате. Если произошла ошибка с сокет, автоматически отбрасывает пакет. Если соединение было ранее потеряно, восстановите соединение. Для распаковки записи на приемной стороне в LogRecord используйте функцию makeLogRecord().

handleError()

Обрабатывает ошибку, возникшую во время emit(). Наиболее вероятной причиной является потеря соединения. Закрывает сокет так, чтобы мы могли повторить на следующем событии.

makeSocket()

Это метод фабрика, который позволяет подклассы определить точный тип сокета, которые они хотят. Внедрение по умолчанию создает TCP сокет (socket.SOCK_STREAM).

makePickle(record)

Pickles словарь отчета атрибут в двоичном формате с префиксом длины и возвращает это готовый к передаче через сокет. Подробности этой операции эквивалентны:

data = pickle.dumps(record_attr_dict, 1)
datalen = struct.pack('>L', len(data))
return datalen + data

Обратите внимание, что соленые огурцы не совсем безопасны. Если вас беспокоит безопасность, возможно, потребуется переопределить этот метод, чтобы реализовать более безопасный механизм. Например, можно подписать соленые огурцы с помощью HMAC, а затем проверить их на принимающей стороне, или можно отключить отключение глобальных объектов на принимающей стороне.

send(packet)

Отправьте pickled байтовую-строку packet в сокет. Формат посланного байтовой-строки как описан в документации для makePickle().

Эта функция позволяет осуществлять частичную передачу, которая может произойти при занятости сети.

createSocket()

Пытается создать сокет; при сбое использует алгоритм экспоненциального возврата. При первоначальном сбое обработчик отбросит сообщение, которое он пытался отправить. Когда последующие сообщения обрабатываются одним и тем же сущность, он не будет пытаться подключиться до тех пор, пока не пройдет некоторое время. Параметры по умолчанию таковы, что начальная задержка составляет одну секунду, и если после этой задержки соединение все еще не может быть установлено, обработчик удвоит задержку каждый раз максимум до 30 секунд.

Это поведение контролируется следующими атрибутами обработчика:

  • retryStart (начальная задержка, значение по умолчанию - 1.0 секунды).
  • retryFactor (множитель, значение по умолчанию 2.0).
  • retryMax (максимальная задержка, значение по умолчанию 30.0 секунды).

Это означает, что, если удаленный слушатель запускает after, обработчик был используемый, вы могли бы потерять сообщения (так как обработчик не будет даже делать попытку связи, пока задержка не протекла, но просто тихо пропускает сообщения в период задержки).

DatagramHandler

Класс DatagramHandler, расположенный в модуле logging.handlers, наследует SocketHandler, чтобы поддержать отправку сообщений логирование по UDP сокетам.

class logging.handlers.DatagramHandler(host, port)

Возвращает новую сущность класса DatagramHandler, предназначенный для связи с удаленным компьютером, адрес которого определяется host и port.

Изменено в версии 3.4: Если port указан как None, сокет домена Unix создается с помощью значение in host - в противном случае создается сокет UDP.

emit()

Подсвечивает словарь атрибут записи и записывает его в сокет в двоичном формате. Если произошла ошибка с сокет, автоматически отбрасывает пакет. Для распаковки записи на приемной стороне в LogRecord используйте функцию makeLogRecord().

makeSocket()

Метод фабрика SocketHandler здесь переопределяется, чтобы создать UDP сокет (socket.SOCK_DGRAM).

send(s)

Отправить pickled байтовую-строку в сокет. Формат посланного байта-строка как описан в документации для SocketHandler.makePickle().

SysLogHandler

Класс SysLogHandler, расположенный в модуле logging.handlers, поддерживает отправку сообщений логирование удаленному или локальному системному журналу 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“. В этом случае доменный Unix сокет является используемый, чтобы послать сообщение в системный журнал. Если facility не указан, то LOG_USER является используемый. Тип открываемой сокет зависит от аргумента socktype, который по умолчанию имеет значение socket.SOCK_DGRAM и, таким образом, открывает сокет UDP. Чтобы открыть TCP сокет (для использования с более новыми демонами системного журнала, такими как rsyslog), определите значение socket.SOCK_STREAM.

Обратите внимание, что если сервер не прослушивает UDP-порт 514, возможно, SysLogHandler не работает. В этом случае проверьте, какой адрес следует использовать для доменного сокета - это зависит от системы. Например, в Linux это обычно „/dev/log „, а в OS/X - „/var/run/syslog“. Вам потребуется проверить свою платформу и использовать соответствующий адрес (возможно, вам потребуется выполнить эту проверку во время выполнения, если приложение должно работать на нескольких платформах). В Windows вы должны использовать параметр UDP.

Изменено в версии 3.2: Был добавлен socktype.

close()

Закрывает сокет на удаленном узле.

emit(record)

Запись форматируется, а затем отправляется на сервер системного журнала. Если информация об исключении присутствует, она не отправляется на сервер.

Изменено в версии 3.2.1: (См.: bpo-12168.) в более ранних версиях сообщение, отправленное демонам системного журнала, всегда завершалось байтом NUL, поскольку ранние версии этих демонов ожидали сообщения, завершенного NUL, несмотря на то, что его нет в соответствующей спецификации (RFC 5424). Более поздние версии этих демонов не ожидают байта NUL, но отключают его, если он там есть, и даже более поздние демоны (которые более тесно придерживаются RFC 5424) передают байт NUL в качестве части сообщения.

Чтобы облегчить обработку сообщений системного журнала перед лицом всех этих различий в поведении демонов, добавление байта NUL стало конфигурируемым посредством использования атрибут уровня класса, append_nul. Это не выполняет своих обязательств к True (сохраняющий существующее поведение), но может быть установлено в False на SysLogHandler сущность для того сущность к not, прилагают терминатора NUL.

Изменено в версии 3.3: (См.: bpo-12419.) в более ранних версиях не было средства для префикса «ident» или «tag» для идентификации источника сообщения. Это может теперь быть определено, используя уровень класса атрибут, не выполнив своих обязательств к "", чтобы сохранить существующее поведение, но который может быть переопределяется на SysLogHandler сущность для того сущность, чтобы предварительно ожидать ident к каждому обработанному сообщению. Обратите внимание, что предоставленный идентификатор должен быть текстовым, а не байтовым и добавляется к сообщению точно так, как есть.

encodePriority(facility, priority)

Кодирование средство и приоритет в целое число. Вы можете передать в строки или целые числа - если строки переданы, внутренние словари сопоставления являются используемый, чтобы преобразовать их в целые числа.

Символьные LOG_ значения определяются в SysLogHandler и отражают значения, определенные в заголовочном файле sys/syslog.h.

Приоритеты

Имя (строка) Символическое значение
alert LOG_ALERT
crit или critical LOG_CRIT
debug LOG_DEBUG
emerg или panic LOG_EMERG
err или error LOG_ERR
info LOG_INFO
notice LOG_NOTICE
warn или warning LOG_WARNING

Средства

Имя (строка) Символическое значение
auth LOG_AUTH
authpriv LOG_AUTHPRIV
cron LOG_CRON
daemon LOG_DAEMON
ftp LOG_FTP
kern LOG_KERN
lpr LOG_LPR
mail LOG_MAIL
news 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)

Наносит на карту имя уровня логирование к приоритетному имени системного журнала. Это может потребоваться переопределить, если вы используете пользовательские уровни или если алгоритм по умолчанию не подходит для ваших нужд. Алгоритм по умолчанию сопоставляет DEBUG, INFO, WARNING, ERROR и CRITICAL с эквивалентными именами системного журнала, а все другие имена уровней - с предупреждением.

NTEventLogHandler

Класс NTEventLogHandler, расположенный в модуле logging.handlers, поддержки, посылающие сообщения логирование в локальная Windows NT, Windows 2000 или журнал событий Windows XP. Прежде чем вы сможете использовать его, вам нужны расширения Mark Hammond’а Win32 для установленного Python.

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.

SMTPHandler

Класс SMTPHandler, расположенный в модуле logging.handlers, поддерживает отправку сообщений логирование на адрес электронной почты через SMTP.

class logging.handlers.SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None, timeout=1.0)

Возвращает новую сущность класса SMTPHandler. Сущность инициализируется с адресами от и до и строкой темы сообщения электронной почты. В качестве toaddrs должен выступать список строки. Чтобы указать нестандартный SMTP-порт, используйте формат кортежа (узел, порт) для аргумента mailhost. Если вы используете строка, стандартный порт SMTP - используемый. Если SMTP- сервер требует проверки подлинности, можно указать кортеж (имя пользователя, пароль) для аргумента credentials.

Чтобы указать использование защищенного протокола (TLS), передайте кортеж аргументу secure. Это будет используемый только при предоставлении учетных данных проверки подлинности. Кортеж должен быть или пустым кортежем, или единственным-значение кортежем с названием keyfile или 2-значение кортежем с названиями файла сертификата и ключевого файла. (Этот кортеж передается методу smtplib.SMTP.starttls().)

Время ожидания может быть указано для связи с SMTP-сервером с помощью аргумента timeout.

Добавлено в версии 3.3: Добавлен аргумент timeout.

emit(record)

Форматирует запись и отправляет ее указанным адресатам.

getSubject(record)

Если требуется указать строку темы, зависящую от записи, переопределите этот метод.

MemoryHandler

Класс MemoryHandler, расположенный в модуле logging.handlers, поддерживает буферизацию записей логирование в памяти, периодически сбрасывая их до target обработчик. Промывка происходит всякий раз, когда буфер заполнен или когда наблюдается событие определенной или большей степени серьезности.

MemoryHandler является подкласс более общего BufferingHandler, который является абстрактным классом. Это буферизирует записи логирование в памяти. Всякий раз, когда каждая запись добавляется в буфер, выполняется проверка путем вызова метода «shouldFlush()» на предмет необходимости очистки буфера. Если он должен, то ожидается, что flush() сделает промывку.

class logging.handlers.BufferingHandler(capacity)

Инициализирует обработчик с буфером указанной емкости. Здесь capacity означает количество буферизованных записей логирования.

emit(record)

Добавить запись в буфер. Если значение shouldFlush() возвращает true, вызовите функцию flush() для обработки буфера.

flush()

Это можно переопределить, чтобы реализовать пользовательское поведение очистки. Эта версия просто заполняет буфер.

shouldFlush(record)

Возвращает True, если буфер не превышает емкость. Этот метод можно переопределить для реализации пользовательских стратегий очистки.

class logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None, flushOnClose=True)

Возвращает новую сущность класса MemoryHandler. Сущность инициализируется с размером буфера capacity (количество буферизованных записей). Если flushLevel не указан, то используется ERROR. Если target не указан, целевой объект должен быть задан с помощью setTarget(), прежде чем этот обработчик сделает что-либо полезное. Если flushOnClose указан как False, то буфер not очищается при закрытии обработчик. Если не определенный или определенный как True, предыдущее поведение смывания буфера произойдет, когда обработчик будет закрыт.

Изменено в версии 3.6: Добавлен параметр flushOnClose.

close()

Вызывает flush(), устанавливает целевой объект на None и очищает буфер.

flush()

Для MemoryHandler промывка означает просто отправку буферизованных записей целевому объекту, если таковая имеется. При этом буфер также очищается. Переопределить, если требуется другое поведение.

setTarget(target)

Задает целевой обработчик для этого обработчика.

shouldFlush(record)

Проверка переполненности буфера или записи в flushLevel или выше.

HTTPHandler

Класс HTTPHandler, расположенный в модуле logging.handlers, поддерживает отправку сообщений логирование на веб-сервер с использованием семантики GET или POST.

class logging.handlers.HTTPHandler(host, url, method='GET', secure=False, credentials=None, context=None)

Возвращает новую сущность класса HTTPHandler. host может иметь форму host:port, должны, вы должны использовать определенный номер порта. Если method не указан, то используется GET. Если secure будет true, то связь HTTPS будет используемый. Параметр context может быть установлен на ssl.SSLContext сущность, чтобы настроить параметры настройки SSL используемый для связи HTTPS. Если credentials определен, это должен быть с 2 кортежами, состоящий из userid и пароля, который будет помещен в заголовок „Разрешения“ HTTP, используя базовую аутентификацию. При указании учетных данных необходимо также указать secure = True, чтобы не передавать код пользователя и пароль через провод.

Изменено в версии 3.5: Добавлен параметр context.

mapLogRecord(record)

Предоставляет словарь на основе record, который должен быть URL-кодированный и отправлен на веб-сервер. Реализация по умолчанию только возвращает record.__dict__. Этот метод может быть переопределен, если, например, на веб-сервер должно быть отправлено только подмножество LogRecord или если требуется более конкретная настройка того, что отправлено на сервер.

emit(record)

Отправляет запись на веб-сервер в виде словаря URL-кодированный. Метод mapLogRecord() - используемый, чтобы преобразовать отчет в словарь, который пошлют.

Примечание

Так как подготовка записи для отправки на веб-сервер не является то же, что и операция универсального форматирования, использование setFormatter() для указания Formatter для HTTPHandler не имеет эффекта. Вместо того, чтобы назвать format(), этот обработчик называет mapLogRecord() и затем urllib.parse.urlencode(), чтобы закодировать словарь в форме, подходящей для отправки в веб-сервер.

QueueHandler

Добавлено в версии 3.2.

Класс QueueHandler, расположенный в модуле logging.handlers, поддерживает отправку сообщений логирование в очередь, например, реализованных в модулях queue или multiprocessing.

Наряду с классом QueueListener, QueueHandler может быть используемый, чтобы позволить обработчики сделать их работу над отдельным поток от того, который делает логирование. Это важно в веб-приложениях, а также в других сервисных приложениях, где клиенты обслуживания потоки должны реагировать как можно быстрее, в то время как любые потенциально медленные операции (например, отправка электронной почты через SMTPHandler) выполняются на отдельном потоке.

class logging.handlers.QueueHandler(queue)

Возвращает новую сущность класса QueueHandler. сущность инициализируется очередью для отправки сообщений. queue может быть любым объектом, похожим на очередь; это используемый как есть методом enqueue(), который должен знать, как отправлять ему сообщения. Очередь не required иметь API отслеживания задач, что означает, что вы можете использовать SimpleQueue сущности для queue.

emit(record)

Ставит в очередь результат подготовки LogRecord. Если возникает исключение (например, из-за заполнения ограниченной очереди), вызывается метод handleError() для обработки ошибки. Это может привести к бесшумному удалению записи (если logging.raiseExceptions False) или к печати сообщения на sys.stderr (если logging.raiseExceptions - True).

prepare(record)

Готовит запись для постановки в очередь. Объект, возвращенный этим методом, ставится в очередь.

Базовая реализация форматирует запись для объединения сообщения, аргументов и информации об исключении, если она имеется. Кроме того, она удаляет элементы, которые можно удалить, из записи на месте.

Вы могли бы хотеть переопределить этот метод, если вы хотите преобразовать отчет в словарь или JSON строка, или послать измененную копию отчета, оставляя оригинал неповрежденным.

enqueue(record)

Ставит в очередь запись с помощью put_nowait(); это можно переопределить, если требуется использовать блокирующее поведение, тайм-аут или настраиваемую реализацию очереди.

QueueListener

Добавлено в версии 3.2.

Класс QueueListener, расположенный в модуле logging.handlers, поддерживает прием сообщений логирование из очереди, например, реализованных в модулях queue или multiprocessing. Сообщения принимаются из очереди во внутреннем поток и передаются на том же самом поток одному или нескольким обработчики для обработки. Хотя QueueListener сам по себе не является обработчик, он документирован здесь, потому что работает рука об руку с QueueHandler.

Наряду с классом QueueHandler, QueueListener может быть используемый, чтобы позволить обработчики сделать их работу над отдельным поток от того, который делает логирование. Это важно в веб-приложениях, а также в других сервисных приложениях, где клиенты обслуживания потоки должны реагировать как можно быстрее, в то время как любые потенциально медленные операции (например, отправка электронной почты через SMTPHandler) выполняются на отдельном поток.

class logging.handlers.QueueListener(queue, *handlers, respect_handler_level=False)

Возвращает новую сущность класса QueueListener. сущность инициализируется очередью для отправки сообщений и списком обработчики, которые будут обрабатывать записи, помещенные в очередь. Очередью может быть любой объект, похожий на очередь; он передается как есть методу dequeue(), который должен знать, как получать сообщения от него. Очередь не required иметь API отслеживания задач (хотя он используемый, если доступен), что означает, что вы можете использовать SimpleQueue сущности для queue.

Если respect_handler_level является True, уровень обработчик соблюдается (по сравнению с уровнем сообщения) при принятии решения о том, следует ли передавать сообщения этому обработчик; иначе поведение как в предыдущих версиях Python - чтобы всегда передать каждое сообщение к каждому обработчик.

Изменено в версии 3.5: Добавлен аргумент respect_handler_level.

dequeue(block)

Dequeeues запись и возвращает ее, опционально блокируя.

Базовая реализация использует get(). Можно переопределить этот метод, если требуется использовать тайм-ауты или работать с пользовательскими реализациями очереди.

prepare(record)

Подготовьте запись для обработки.

Эта реализация только что возвращает сданную запись. Этот метод может потребоваться переопределить, если требуется выполнить пользовательскую сортировку или манипуляцию записью перед ее передачей обработчики.

handle(record)

Обращайтесь с отчетом.

Это просто петляет через обработчики, предлагая им запись для обработки. Фактический объект, переданный к обработчики, является этим, которое является возвращенный от prepare().

start()

Запускает слушателя.

При этом запускается фоновый поток для отслеживания очереди обработки LogRecords.

stop()

Останавливает слушателя.

Это просит поток прекратить работу, а затем ждет, пока он это сделает. Обратите внимание, что если вы не вызовете это до завершения работы приложения, в очереди могут остаться некоторые записи, которые не будут обработаны.

enqueue_sentinel()

Записывает стража в очередь, чтобы заставить слушателя выйти. Эта реализация использует put_nowait(). Можно переопределить этот метод, если требуется использовать тайм-ауты или работать с пользовательскими реализациями очереди.

Добавлено в версии 3.3.

См.также

Модуль logging
Справочник API для модуля logging.
Модуль logging.config
Конигарационное API для модуля logging.