Обработчик: Недопустимое название — Викисловарь

Содержание

%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%87%d0%b8%d0%ba - English translation – Linguee

Организация обеспечила подготовку сотрудников и предоставила оборудование для укрепления базы четырех общинных радиостанций в

[...]

Карибском бассейне («Roоts FM», Ямайка; «Radio

[...] Paiwomak», Гайана; «Radio em ba Mango», Доминика; «Radio [...]

Muye», Суринам).

unesdoc.unesco.org

The Organization also provided training and equipment to reinforce the capacity of four community radio

[...]

stations in the Caribbean (Roots FM, Jamaica; Radio Paiwomak, Guyana;

[...] Radio em ba Mango, Dominica; and Radio Muye, [...]

Suriname).

unesdoc.unesco.org

RFLQ_S007BA Расчет ликвидности: [...]

перенести фактические данные в нов. бизнес-сферу .

enjoyops.de

enjoyops.de

RFLQ_S007BA Liquidity Calculation: [...]

Transfer Actual Data to New Business Area .

enjoyops.de

enjoyops.de

RM06BA00 Просмотр списка заявок .

enjoyops.de

enjoyops.de

RM06BA00 List Display of Purchase Requisitions .

enjoyops.de

enjoyops.de

Еще одним из популярных туристических мест в 2010

[...] году будет, согласно BA, Стамбул в Турции.

tourism-review.ru

Among other popular destinations for 2010 will be,

[...] according to the BA, Istanbul in Turkey.

tourism-review.com

На устройствах РПН с числом переключений более чем 15. 000 в год мы

[...]

рекомендуем применять маслофильтровальную установку OF100 (инструкция по

[...] эксплуатации BA 018) с бумажными [...]

сменными фильтрами.

highvolt.de

If the number of on-load tap-changer operations per year

[...]

is 15,000 or higher, we recommend the use of

[...] our stationary oil filter unit OF [...]

100 with a paper filter insert (see Operating Instructions BA 018).

highvolt.de

В нашем

[...] каталоге Вы найдете описание всех преимуществ, технических характеристик и номера деталей соединений SPH/BA.

staubli.com

Discover all the advantages, technical features and part numbers of the SPH/BA couplings in our catalog.

staubli.com

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

britishairways.com

Requests and bookings relating to Rewards (including Service Partner Rewards) may be made online at ba.com or through the Member's local service centre in accordance with such procedures that may be in force from time to time for the issue of Rewards, as set out on ba.com.

britishairways.com

Быстроразъемные

[...] соединения SPH/BA с защитой от [...]

утечек при разъединении и быстроразъемные полнопоточные соединения DMR для

[...]

систем охлаждения: масляных систем и систем вода/гликоль.

staubli.com

SPH/BA clean break and DMR full [. ..]

flow quick release couplings for cooling applications such as oil and water glycol connections.

staubli.com

Компания также поставляет систему шасси для первого в мире гражданского конвертоплана «Tiltrotor»

[...] [...] (воздушного судна, оснащённого поворотными несущими винтами): Messier-Bugatti-Dowty поставляет оборудование для BA609 фирмы Bell/Agusta Aerospace, летательного аппарата, сочетающего в себе скорость и дальность самолёта с маневренностью [...] [...]

вертикально взлетающего вертолёта.

safran.ru

It also supplies the landing gear for the Bell/Agusta Aerospace BA609, the world’s first civilian tilt-rotor aircraft, combining the flexibility of vertical flight with the speed and range of a conventional aircraft.

safran.ru

Рейтинг финансовой устойчивости

[...] "D-" (что отображает Ba3 по BCA оценке) присвоен [. ..]

Ардшининвестбанку как одному из крупнейших

[...]

банков Армении (будучи вторым банком в Армении по величине активов с долей рынка в 12,2% в 2007 году, Ардшининвестбанк в марте 2008 года стал лидером по этому показателю), широкой филиальной сетью, хорошими финансовыми показателями, особенно – растущей рентабельностью, высокой капитализацией и показателями эффективности выше среднего в контексте армянского рынка.

ashib.am

According to Moody's, ASHIB's "D-" BFSR -- which maps to a Baseline

[...] Credit Assessment of Ba3 derives from its [...]

good franchise as one of Armenia's largest

[...]

banks (ranking second in terms of assets with a 12.2% market share as at YE2007 -- reportedly moving up to first place by March 2008) and good financial metrics, particularly, buoyant profitability, solid capitalisation and above-average efficiency ratios, within the Armenian context.

ashib.am

В январе 2009 года, в рамках ежегодного пересмотра кредитных рейтингов, рейтинговой агентство Moody’s

[...]

подтвердило

[...] присвоенный в 2007 году международный кредитный рейтинг на уров
н
е Ba3 / Прогноз «Стабильный» и рейтинг по национальной шкале [...]

Aa3.ru, что свидетельствует

[...]

о стабильном финансовом положении ОГК-1.

ogk1.com

In January 2009 as part of annual revising of credit ratings, the international rating agency Moody’s

[...]

confirmed the international

[...] credit rating at the level Ba3 with Stable outlook attributed in 2007 and the national scale rating Aa3.ru, which is [...]

an evidence of OGK-1’s stable financial position.

ogk1.com

Введение в события - Изучение веб-разработки

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

Предпосылки: Базовая компьютерная грамотность, базовое понимание HTML и CSS, Первые шаги в JavaScript.
Задача: Понять фундаментальную теорию событий, как они работают в браузерах и как события могут различаться в разных средах программирования.

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

В Web события запускаются внутри окна браузера и, как правило, прикрепляются к конкретному элементу, который в нем находится. Это может быть один элемент, набор элементов, документ HTML, загруженный на текущей вкладке, или все окно браузера. Существует множество различных видов событий, которые могут произойти, например:

  • Пользователь кликает мышью или наводит курсор на определённый элемент.
  • Пользователь нажимает клавишу на клавиатуре.
  • Пользователь изменяет размер или закрывает окно браузера.
  • Завершение загрузки веб-страницы.
  • Отправка данных через формы.
  • Воспроизведение видео, пауза или завершение воспроизведения.
  • Произошла ошибка.

Подробнее о событиях можно посмотреть в Справочнике по событиям.

Каждое доступное событие имеет обработчик событий — блок кода (обычно это функция JavaScript, вводимая вами в качестве разработчика), который будет запускаться при срабатывании события. Когда такой блок кода определён на запуск в ответ на возникновение события, мы говорим, что мы регистрируем обработчик событий. Обратите внимание, что обработчики событий иногда называют

слушателями событий (от англ. event listeners). Они в значительной степени взаимозаменяемы для наших целей, хотя, строго говоря, они работают вместе. Слушатель отслеживает событие, а обработчик — это код, который запускается в ответ на событие.

Примечание: Важно отметить, что веб-события не являются частью основного языка JavaScript. Они определены как часть JavaScript-API, встроенных в браузер.

Простой пример

Рассмотрим простой пример. Вы уже видели события и обработчики событий во многих примерах в этом курсе, но давайте повторим для закрепления информации. В этом примере у нас есть кнопка <button>, при нажатии которой цвет фона изменяется случайным образом:

<button>Change color</button>

JavaScript выглядит так:

const btn = document. querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = function() {
  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}

В этом коде мы сохраняем ссылку на кнопку внутри переменной btn типа const, используя функцию Document.querySelector(). Мы также определяем функцию, которая возвращает случайное число. Третья часть кода — обработчик события. Переменная btn указывает на элемент <button> — для этого типа объекта существуют возникающие при определённом взаимодействии с ним события, а значит, возможно использование обработчиков событий. Мы отслеживаем момент возникновения события при щелчке мышью, связывая свойство обработчика события onclick с анонимной функцией, генерирующей случайный цвет RGB и устанавливающей его в качестве цвета фона элемента <body>.

Этот код теперь будет запускаться всякий раз, когда возникает событие при нажатии на элемент <button> — всякий раз, когда пользователь щёлкает по нему.

Пример вывода выглядит следующим образом:

События не только для веб-страниц

События, как понятие, относятся не только к JavaScript — большинство языков программирования имеют модель событий, способ работы которой часто отличается от модели в JavaScript. Фактически, даже модель событий в JavaScript для веб-страниц отличается от модели событий для просто JavaScript, поскольку используются они в разных средах.

Например, Node.js — очень популярная среда исполнения JavaScript, которая позволяет разработчикам использовать JavaScript для создания сетевых и серверных приложений. Модель событий Node.js основана на том, что существуют обработчики, отслеживающие события, и эмиттеры (передатчики), которые периодически генерируют события. В общем-то, это похоже на модель событий в JavaScript для веб-страниц, но код совсем другой. В этой модели используется функция on() для регистрации обработчиков событий, и функция once() для регистрации обработчика событий, который отключается после первого срабатывания. Хорошим примером использования являются протоколы событий HTTP connect event docs.

Вы также можете использовать JavaScript для создания кросс-браузерных расширений — улучшения функциональности браузера с помощью технологии WebExtensions. В отличии от модели веб-событий здесь свойства обработчиков событий пишутся в так называемом регистре CamelCase (например, onMessage, а не onmessage) и должны сочетаться с функцией addListener. См. runtime.onMessage page для примера.

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

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

Свойства обработчика событий

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

const btn = document.querySelector('button');

btn.onclick = function() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}

В данной ситуации свойство onclick — это свойство обработчика события. В принципе это обычное свойство кнопки как элемента (наравне с btn.textContent или btn.style), но оно относится к особому типу. Если вы установите его равным какому-нибудь коду, этот код будет запущен при возникновении события (при нажатии на кнопку).

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

const btn = document. querySelector('button');

function bgChange() {
  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}

btn.onclick = bgChange;

Давайте теперь поэкспериментируем с другими свойствами обработчика событий.

Создайте локальную копию файла random-color-eventhandlerproperty.html и откройте её в своём браузере. Это всего лишь копия простого примера про случайные цвета, который мы уже разобрали в этой статье. Теперь попробуйте изменить btn.onclick на следующие значения и понаблюдайте за результатами:

  • btn.onfocus и btn.onblur — Цвет изменится, когда кнопка будет сфокусирована или не сфокусирована (попробуйте нажать Tab, чтобы выбрать кнопку или убрать выбор). Эти свойства часто применяются для отображения информации о том, как заполнить поля формы, когда они сфокусированы, или отобразить сообщение об ошибке, если поле формы было заполнено с неправильным значением.
  • btn.ondblclick — Цвет будет изменяться только при двойном щелчке.
  • window.onkeypress, window.onkeydown, window.onkeyup — Цвет будет меняться при нажатии клавиши на клавиатуре, причём keypress ссылается на обычное нажатие (нажатие кнопки и последующее её отпускание как одно целое), в то время как keydown и keyup разделяют действия на нажатие клавиши и отпускание, и ссылаются на них соответственно. Обратите внимание, что это не работает, если вы попытаетесь зарегистрировать этот обработчик событий на самой кнопке - его нужно зарегистрировать на объекте window, который представляет все окно браузера.
  • btn.onmouseover и btn.onmouseout — Цвет будет меняться при наведении указателя мыши на кнопку или когда указатель будет отводиться от кнопки соответственно.

Некоторые события очень общие и доступны практически в любом месте (например, обработчик onclick может быть зарегистрирован практически для любого элемента), тогда как некоторые из них более конкретны и полезны только в определённых ситуациях (например, имеет смысл использовать onplay только для определённых элементов, таких как <video>).

Встроенные обработчики событий - не используйте их

Самый ранний из введённых в сеть Web методов регистрации обработчиков событий базируется на HTML атрибутах (встроенные обработчики событий):

<button>Press me</button>
function bgChange() {
  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}

Значение атрибута —  это буквально код JavaScript, который вы хотите запустить при возникновении события. В приведённом выше примере вызывается функция, определённая внутри элемента <script> на той же странице, но вы также можете вставить JavaScript непосредственно внутри атрибута, например:

<button>Press me</button>

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

Более того, не рекомендуется смешивать HTML и JavaScript файлы, так как в дальнейшем такой код становится сложнее с точки зрения обработки (парсинга). Лучше держать весь JavaScript в одном месте. Также, если он находится в отдельном файле, вы можете применить его к нескольким документам HTML.

Даже при работе только в одном файле использование встроенных обработчиков не является хорошей идеей. Ладно, если у вас одна кнопка, но что, если у вас их 100? Вам нужно добавить в файл 100 атрибутов; обслуживание такого кода очень быстро превратится в кошмар. С помощью JavaScript вы можете легко добавить функцию обработчика событий ко всем кнопкам на странице независимо от того, сколько их было.

Например:

const buttons = document.querySelectorAll('button');

for (var i = 0; i < buttons. length; i++) {
  buttons[i].onclick = bgChange;
}

Обратите внимание, что для перебора всех элементов, которые содержит объект NodeList, можно воспользоваться встроенным методом forEach():

buttons.forEach(function(button) {
  button.onclick = bgChange;
});

Примечание: Разделение логики вашей программы и вашего контента также делает ваш сайт более дружественным к поисковым системам.

Функции addEventListener() и removeEventListener()

Новый тип механизма событий определён в спецификации Document Object Model (DOM) Level 2 Events, которая предоставляет браузеру новую функцию — addEventListener(). Работает она аналогично свойствам обработчика событий, но синтаксис совсем другой. Наш пример со случайным цветом мог бы выглядеть и так:

var btn = document.querySelector('button');

function bgChange() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document. body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', bgChange);

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

btn.addEventListener('click', function() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
});

Этот механизм имеет некоторые преимущества по сравнению с более старыми механизмами, рассмотренными ранее. Например, существует аналогичная функция removeEventListener(), которая удаляет ранее добавленный обработчик. Это приведёт к удалению набора обработчиков в первом блоке кода в этом разделе:

btn. removeEventListener('click', bgChange);

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

Также вы можете зарегистрировать несколько обработчиков для одного и того же события на элементе. Следующие два обработчика не будут применяться:

myElement.onclick = functionA;
myElement.onclick = functionB;

Поскольку вторая строка будет перезаписывать значение onclick, установленное первой. Однако, если:

myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);

Обе функции будут выполняться при щелчке элемента.

Кроме того, в этом механизме событий имеется ряд других мощных функций и опций. Эта тема выходит за рамки данной статьи, но если вы хотите изучить подробнее, переходите по ссылкам: Метод Event​Target​.add​Event​Listener() и Метод Event​Target​.remove​Event​Listener().

Какой механизм мне использовать?

Из трёх механизмов определённо не нужно использовать атрибуты событий HTML. Как упоминалось выше, это устаревшая и плохая практика.

Остальные два являются относительно взаимозаменяемыми, по крайней мере для простых целей

  • Свойства обработчика событий имеют меньшую мощность и параметры, но лучше совместимость между браузерами (поддерживается ещё в Internet Explorer 8). Вероятно, вам следует начать с них, когда вы учитесь.
  • События уровня 2 DOM (addEventListener() и т. д.) являются более мощными, но также могут стать более сложными и хуже поддерживаться (поддерживается ещё в Internet Explorer 9). Вам также стоит поэкспериментировать с ними и стремиться использовать их там, где это возможно.

Основные преимущества третьего механизма заключаются в том, что при необходимости можно удалить код обработчика событий, используя removeEventListener(), и так же можно добавить несколько элементов-обработчиков того же типа к элементам. Например, вы можете вызвать addEventListener('click', function() {...}) для элемента несколько раз, с разными функциями, указанными во втором аргументе. Это невозможно при использовании свойств обработчика событий, поскольку любые последующие попытки установить свойство будут перезаписывать более ранние, например:

element.onclick = function1;
element.onclick = function2;
etc.

Примечание: Если вам требуется поддержка браузеров старше Internet Explorer 8 в вашем проекте, вы можете столкнуться с трудностями, так как такие старые браузеры используют старые модели событий из более новых браузеров. Но не бойтесь, большинство библиотек JavaScript (например, jQuery) имеют встроенные функции, которые абстрагируют различия между браузерами. Не беспокойтесь об этом слишком много на этапе вашего учебного путешествия.

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

   Объекты событий

Иногда внутри функции обработчика событий вы можете увидеть параметр, заданный с таким именем, как event, evt или просто e. Называется он объектом события и он автоматически передаётся обработчикам событий для предоставления дополнительных функций и информации. Например, давайте немного перепишем наш пример со случайным цветом:

function bgChange(e) {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  e.target.style.backgroundColor = rndCol;
  console.log(e);
}

btn.addEventListener('click', bgChange);

Итак в коде выше мы включаем объект события e в функцию, а в функции — настройку стиля фона для e.target, который является кнопкой. Свойство объекта события target всегда является ссылкой на элемент, с которым только что произошло событие. Поэтому в этом примере мы устанавливаем случайный цвет фона на кнопке, а не на странице.

Примечание: Вместо e/evt/event можно использовать любое имя для объекта события, которое затем можно использовать для ссылки на него в функции обработчика событий. e/evt/event чаще всего используются разработчиками, потому что они короткие и легко запоминаются. И хорошо придерживаться стандарта.

e.target применяют, когда нужно установить один и тот же обработчик событий на несколько элементов и, когда на них происходит событие, применить определённое действие к ним ко всем. Например, у вас может быть набор из 16 плиток, которые исчезают при нажатии. Полезно всегда иметь возможность просто указать, чтобы объект исчез, как e.target, вместо того, чтобы выбирать его более сложным способом. В следующем примере (см. исходный код на  useful-eventtarget.html,а как он работает можно посмотреть здесь), мы создаём 16 элементов <div> с использованием JavaScript. Затем мы выберем все из них, используя document.querySelectorAll(), и с помощью цикла for выберем каждый из них, добавив обработчик onclick к каждому так, чтобы случайный цвет применялся к каждому клику:

var divs = document.querySelectorAll('div');

for (var i = 0; i < divs.length; i++) {
  divs[i].onclick = function(e) {
    e.target.style.backgroundColor = bgChange();
  }
}

Результат выглядит следующим образом (попробуйте щёлкнуть по нему):

Большинство обработчиков событий, с которыми вы столкнулись, имеют только стандартный набор свойств и функций (методов), доступных для объекта события (см. Event для ссылки на полный список). Однако некоторые более продвинутые обработчики добавляют специальные свойства, содержащие дополнительные данные, которые им необходимо выполнять. Например, Media Recorder API имеет событие, доступное для данных, которое срабатывает, когда записано какое-либо аудио или видео и доступно для выполнения чего-либо (например, для сохранения или воспроизведения). Соответствующий объект события ondataavailable handler имеет свойство данных, содержащее записанные аудио- или видеоданные, чтобы вы могли получить к нему доступ и что-то сделать с ним.

    Предотвращение поведения по умолчанию

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

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

Простая форма HTML, в которой требуется ввести ваше имя и фамилию:

<form>
  <div>
    <label for="fname">Имя: </label>
    <input type="text">
  </div>
  <div>
    <label for="lname">Фамилия: </label>
    <input type="text">
  </div>
  <div>
     <input type="submit">
  </div>
</form>
<p></p>

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

var form = document.querySelector('form');
var fname = document.getElementById('fname');
var lname = document.getElementById('lname');
var submit = document.getElementById('submit');
var para = document.querySelector('p');

form.onsubmit = function(e) {
  if (fname.value === '' || lname.value === '') {
    e.preventDefault();
    para.textContent = 'Оба поля должны быть заполнены!';
  }
}

Очевидно, что это довольно слабая проверка формы - это не помешает пользователю отправить форму с пробелами или цифрами, введёнными в поля, но для примера подходит. Вывод выглядит следующим образом:

Всплытие и перехват событий

Последним предметом для рассмотрения в этой теме является то, с чем вы не часто будете сталкиваться, но это может стать настоящей головной болью, если вы не поймёте, как работает следующий механизм. Всплытие и перехват событий — два механизма, описывающих, что происходит, когда два обработчика одного и того же события активируются на одном элементе. Посмотрим на пример. Чтобы сделать это проще — откройте пример show-video-box.html в одной вкладке и исходный код в другой вкладке. Он также представлен ниже:

Это довольно простой пример, который показывает и скрывает <div> с элементом <video> внутри него:

<button>Display video</button>

<div>
  <video>
    <source src="rabbit320.mp4" type="video/mp4">
    <source src="rabbit320.webm" type="video/webm">
    <p>Your browser doesn't support HTML5 video. Here is a <a href="rabbit320.mp4">link to the video</a> instead.</p>
  </video>
</div>

При нажатии на кнопку <button>, изменяется атрибут класса элемента <div> с hidden на showing (CSS примера содержит эти два класса, которые размещают блок вне экрана и на экране соответственно):

div {
        position: absolute;
        top: 50%;
        transform: translate(-50%,-50%);
        ...
      }
.hidden {
   left: -50%;
  }
.showing {
   left: 50%;
  }
var btn = document.querySelector('button');
btn.onclick = function() {
  videoBox.setAttribute('class', 'showing');
}

Затем мы добавляем ещё пару обработчиков событий onclick. Первый к <div>, а второй к <video>. Идея заключается в том, чтобы при щелчке по области <div> вне зоны видео поле снова скрылось, а при клике в области <video>  видео начало воспроизводиться.

var videoBox = document.querySelector('div');
var video = document.querySelector('video');

videoBox.onclick = function() {
  videoBox.setAttribute('class', 'hidden');
};

video.onclick = function() {
  video.play();
};

Но есть проблема: когда вы нажимаете на видео, оно начинает воспроизводиться, но одновременно вызывает скрытие <div>. Это связано с тем, что видео находится внутри <div>, это часть его, поэтому нажатие на видео фактически запускает оба вышеуказанных обработчика событий.

Всплытие и перехват событий — концепция выполнения

Когда событие инициируется элементом, который имеет родительские элементы (например, <video> в нашем случае), современные браузеры выполняют две разные фазы —  фазу  захвата и фазу всплытия.

На стадии захвата происходит следующее:

  • Браузер проверяет, имеет ли самый внешний элемент (<html>) обработчик события onclick, зарегистрированный на нем на этапе захвата и запускает его, если это так.
  • Затем он переходит к следующему элементу внутри <html> и выполняет то же самое, затем следующее и так далее, пока не достигнет элемента, на который на самом деле нажали.

На стадии всплытия происходит полная противоположность:

  • Браузер проверяет, имеет ли элемент, который был фактически нажат, обработчик события onclick, зарегистрированный на нем в фазе всплытия, и запускает его, если это так.
  • Затем он переходит к следующему непосредственному родительскому элементу и выполняет то же самое, затем следующее и так далее, пока не достигнет элемента <html>.

(Нажмите на изображение, чтобы увеличить диаграмму)

В современных браузерах по умолчанию все обработчики событий регистрируются в фазе всплытия. Итак, в нашем текущем примере, когда вы нажимаете видео, событие click вызывается из элемента <video> наружу, в элемент <html>. По пути:

  • Он находит обработчик video.onclick... и запускает его, поэтому видео сначала начинает воспроизводиться.
  • Затем он находит обработчик videoBox.onclick... и запускает его, поэтому видео также скрывается.
Исправление проблемы с помощью stopPropagation()

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

Поэтому мы можем исправить нашу текущую проблему, изменив вторую функцию-обработчик в предыдущем блоке кода:

video.onclick = function(e) {
  e.stopPropagation();
  video.play();
};

Вы можете попробовать создать локальную копию show-video-box.html и попробовать его самостоятельно исправить или просмотреть исправленный результат в show-video-box-fixed.html (также см. исходный код здесь).

Примечание: Зачем беспокоиться как с захватом, так и с всплыванием? Что ж, в старые добрые времена, когда браузеры были менее совместимы, чем сейчас, Netscape использовал только захват событий, а Internet Explorer использовал только всплывающие события. Когда W3C решил попытаться стандартизировать поведение и достичь консенсуса, они в итоге получили эту систему, которая включала в себя и то, и другое, что реализовано в одном из современных браузеров.

Примечание: Как упоминалось выше, по умолчанию все обработчики событий регистрируются в фазе всплытия и это имеет смысл в большинстве случаев. Если вы действительно хотите зарегистрировать событие в фазе захвата, вы можете сделать это, зарегистрировав обработчик с помощью addEventListener() и установив для третьего дополнительного свойства значение true.

Делегирование события

Всплытие также позволяет нам использовать делегирование событий.  Если у какого-либо родительского элемента есть множество дочерних элементов, и вы хотите, чтобы определённый код выполнялся при щелчке (событии) на каждом из дочерних элементов, можно установить обработчик событий на родительском элементе и события, происходящие на дочерних элементах будут всплывать до их родителя. При этом не нужно устанавливать обработчик событий на каждом дочернем элементе.

Хорошим примером является серия элементов списка. Если вы хотите, чтобы каждый из них, например, отображал сообщение при нажатии, вы можете установить обработчик событий click для родительского элемента <ul> и он будет всплывать в элементах списка.

Эту концепцию объясняет в своём блоге Дэвид Уолш, где приводит несколько примеров. (см. How JavaScript Event Delegation Works.)

Это все, что вам нужно знать о веб-событиях на этом этапе. Как уже упоминалось, события не являются частью основного JavaScript — они определены в веб-интерфейсах браузера (Web API).

Кроме того, важно понимать, что различные контексты, в которых используется JavaScript, обычно имеют разные модели событий — от веб-API до других областей, таких как браузерные WebExtensions и Node.js (серверный JavaScript). Может сейчас вы не особо в этом разбираетесь, но по мере изучения веб-разработки начнёт приходить более ясное понимание тематики.

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

  • Event order (обсуждение захвата и всплытий) — превосходно детализированная часть от Peter-Paul Koch.
  • Event accessing (discussing of the event object) — another excellently detailed piece by Peter-Paul Koch.
  • Event reference

Что такое обработчик - CodeRoad



Привет, я пытаюсь выучить некоторые термины, связанные с программированием, и часто натыкаюсь на слово обработчик. Может ли кто-нибудь объяснить, что означает обработчик и когда использовать этот термин?

handler
Поделиться Источник Unknown     12 октября 2008 в 11:14

3 ответа


  • Что такое функция try block handler?

    Недавно я наткнулся на этот вопрос - Что такое обработчик блока function try? Кроме того, где это может быть полезно?

  • Что такое обработчик?

    Очень нубский вопрос, В asp.net можете ли вы объяснить самым простым способом: что такое обработчик ? Как вы можете использовать обработчики.. Большое спасибо.



88

Обработчик-это routine/function/method, который специализируется на определенном типе данных или сосредоточен на определенных специальных задачах.

Примеры:

  • Обработчик событий-получает и переваривает события и сигналы от окружающей системы (например, OS или GUI).

  • Обработчик памяти-выполняет определенные специальные задачи над памятью.

  • Обработчик ввода файла-функция, получающая ввод файла и выполняющая специальные задачи над данными, все это, конечно, зависит от контекста.

Поделиться sharkin     12 октября 2008 в 11:26



13

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

Поделиться An̲̳̳drew     12 октября 2008 в 12:23



8

Я думаю, что это очень общий термин, без определения 'hard'. Смысл очень контекстуальный, варьируется в зависимости от общего дизайна кода.

Для меня это обычно означает какой-то код, который вызывается из внутреннего ядра и должен делать какие-то вещи и возвращаться. Эта часть 'inner' может иметь несколько доступных 'handlers' и выбирает, какую из них вызвать.

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

Поделиться Javier     12 октября 2008 в 11:53


  • Что такое обработчик xml-rpc?

    Привет, я новичок в Open ERP и хочу обновить запись в Open ERP с помощью метода Write. Следующий код для обновления взят из примера на doc.openerp.com : /** * $client = xml-rpc handler * $relation = name of the relation ex: res.partner * $attribute = name of the attribute ex:code * $operator =...

  • Что такое обработчик alt, говоря об обработке системных исключений Objective-C runtime?

    Глядя на исходный код системы Objective-C runtime system, особенно на файл objc- exception.mm, я нашел выражение alt handler и функции, которые имеют дело с обработчиками alt. Я понятия не имею, что это такое, но, судя по комментариям к файлам, если библиотека времени выполнения скомпилирована без...


Похожие вопросы:


Как определить, что такое обработчик исходящей почты по умолчанию?

Как я могу узнать, что такое обработчик почты по умолчанию в Windows 7? Назначение: Когда вы отправляете один или несколько файлов .jpg в виде вложений email с помощью приложения (или Windows...


Что такое обработчик событий загрузки формы в Java?

Что такое обработчик событий в Java (с использованием net beans), который напоминает From_Load в C#?


Что такое обработчик событий "Paint" в Java?

Что такое обработчик событий в Java (с использованием net beans, Swing), который напоминает Paint в C#? Событие, которое должно быть запущено при восстановлении формы, изменении размера ... и т. д...


Что такое функция try block handler?

Недавно я наткнулся на этот вопрос - Что такое обработчик блока function try? Кроме того, где это может быть полезно?


Что такое обработчик?

Очень нубский вопрос, В asp.net можете ли вы объяснить самым простым способом: что такое обработчик ? Как вы можете использовать обработчики.. Большое спасибо.


Что такое обработчик xml-rpc?

Привет, я новичок в Open ERP и хочу обновить запись в Open ERP с помощью метода Write. Следующий код для обновления взят из примера на doc.openerp.com : /** * $client = xml-rpc handler * $relation =...


Что такое обработчик alt, говоря об обработке системных исключений Objective-C runtime?

Глядя на исходный код системы Objective-C runtime system, особенно на файл objc- exception.mm, я нашел выражение alt handler и функции, которые имеют дело с обработчиками alt. Я понятия не имею, что...


В go вручную вызовите обработчик http.FileServer и/или что такое обработчик http

Я опытный программист, но новичок в go. Заранее приношу извинения, если это очевидный вопрос или хорошо проторенный путь. Я все еще пытаюсь сориентироваться в языке и его семантике. Я пытаюсь...


Что такое обработчик ловушек?

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


Что такое вызывающая нить?

Я использую CameraAPI2 из Android для разработки приложений. Я использую setOnImageAvailableListener(OnImageAvailableListener слушателя, обработчик обработчик), чтобы указать функцию обратного...

Добавление обработчика событий | Microsoft Docs

  • Чтение занимает 2 мин

В этой статье

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

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

Добавление обработчика событий для элемента управления диалогового окна

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

  2. Щелкните правой кнопкой мыши элемент управления, для которого нужно обработать событие уведомления.

  3. В контекстном меню выберите команду Добавить обработчик события, чтобы открыть мастер обработчика события.

  4. Выберите событие в поле Тип сообщений, чтобы добавить в класс, выбранный в поле Список классов.

  5. Примите имя по умолчанию в поле Имя функции-обработчика или введите другое имя.

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

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

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

Содержание раздела

Мастер обработчиков событий

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

  • Имя команды

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

  • Тип сообщения

    Отображает список возможных обработчиков сообщений для выбранного элемента управления.

  • Имя функции-обработчика

    Отображает имя функции, которая добавляется для обработки события. Имя по умолчанию основано на типе сообщения и команде, перед которыми добавляется On. Например, для кнопки с именем IDC_BUTTON1 тип сообщения BN_CLICKED отображает имя функции-обработчика OnBnClickedButton1.

  • Список классов

    Отображает доступные классы, к которым можно добавить обработчик событий. Класс для выбранного диалогового окна выделяется красным цветом.

  • Описание обработчика

    Предоставляет описание для элемента, выбранного в поле Тип сообщения. Это поле недоступно.

  • Добавить/править

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

  • Изменение кода

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

Создание обработчиков событий на уровне приложений в Excel

  • Чтение занимает 2 мин
  • Применяется к:
    Excel 2007, Excel 2003, Excel 2002, Excel 2000

В этой статье

Примечание

Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.

Аннотация

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

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

Дополнительные сведения

Чтобы создать обработник событий на уровне приложений, необходимо использовать следующие основные действия:

  • Объявите переменную для объекта Application с помощью ключевого слова WithEvents. Ключевое слово WithEvents можно использовать для создания переменной объекта, реагируя на события, запускаемые объектом ActiveX (например, объектом Application). ПРИМЕЧАНИЕ. WithEvents действителен только в модуле класса.
  • Создайте процедуру для конкретного события Приложения. Например, можно создать процедуру для события WindowResize, WorkbookOpen или SheetActivate объекта, объявленного с помощью WithEvents.
  • Создайте и запустите процедуру, которая запускает обработник событий.

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

Создание и инициирование обработка событий

  1. Откройте новую книгу.

  2. В меню Tools указать макрос, а затем нажмите кнопку Visual Basic Редактор.

    Примечание

    В Microsoft Office Excel 2007 щелкните Visual Basic в группе Кода на вкладке Разработчик.

  3. Щелкните модуль класса в меню Insert. При этом в проект будет вставлен модуль под названием " <book name> - Class1 (Code)".

  4. Введите следующую строку кода в модуле Class1 (Code):

    Public WithEvents appevent As Application
    

    Ключевое слово WithEvents делает appevent variable доступной в окне модуля Class1 (Code).

  5. В окне модуля Class1 (Code) щелкните объект drop-down и нажмите кнопку appevent в списке.

  6. В окне модуля Class1 (Code) щелкните выпадаемую процедуру и нажмите кнопку WindowResize в списке. В лист модуля Class1 (Code) будет добавлено следующее:

       Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
           ByVal Wn As Excel.Window)
    
       End Sub
    
  7. Добавьте код в лист модуля Class1 (Code), чтобы он появился следующим образом:

           Public WithEvents appevent As Application
    
    Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
               ByVal Wn As Excel.Window)
    
    MsgBox "you resized a window"
    
    End Sub
    

    Далее необходимо создать экземпляр класса, а затем задать appevent-объект экземпляра класса1 приложению. Это происходит потому, что при объявлении переменной WithEvents во время разработки не существует объекта, связанного с ней. Переменная WithEvents, как и любая другая переменная объекта, должна создать объект и назначить ссылку на объект переменной WithEvents.

  8. В меню Вставка щелкните Модуль, чтобы вставить общий лист модуля типа в проект.

  9. В этом листе модуля введите следующий код:

          Dim myobject As New Class1
    
          Sub Test()
              Set myobject.appevent = Application
          End Sub
    
  10. Запустите тестовый макрос.

    Вы только что установили обработитель событий для каждого запуска при повторном окне книги в Microsoft Excel.

  11. В меню Файл нажмите кнопку Закрыть и вернуться в Microsoft Excel.

  12. Resize a workbook window. Будет отображаться поле сообщений с "вы размером окна".

Отключение обработка событий

Если вы закроете книгу, содержаную в этом проекте, обработник событий на уровне приложений будет отключен. Чтобы программным образом отключить обработник событий, сделайте следующее:

  1. Запустите редактор Visual Basic.

  2. В макро коде, который вы ввели в шаге 9, измените макрос на:

          Sub test()
              Set myobject.appevent = Nothing
          End Sub
    
  3. Снова запустите тестовый макрос.

  4. В меню Файл нажмите кнопку Закрыть и вернуться в Microsoft Excel.

  5. Resize a workbook window.

    Поле сообщений не будет отображаться.

Обработчик поверхностных пороков металла

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

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

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

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

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

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

Работа сменная, по непрерывному графику, требует высокой исполнительской дисциплины с целью предотвращения аварий.

Обработчик платежа -

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

Важно: домен в обработчике платежей должен полностью совпадать с тем, который вы добавляете к нам в систему в качестве проекта

CHECK: проверка возможности оказания услуги абоненту, запрос отправляется до прохождения оплаты. Вы должны подтвердить готовность системы (проверить корректность суммы платежа, существование счета в БД и т. д.)

PAY: уведомление об успешном списании, вы должны оказать услугу абоненту. При любой ошибке на данном этапе (например, не доступна БД) платеж получает статус «Не завершен». После устранения проблем вы можете повторно провести платеж в интерфейсе статистики. Деньги зачисляются на баланс партнера независимо от ответа обработчика

PREAUTH: уведомление в платежах с преавторизацией, когда средства успешно заблокированы. Важно! Не следует оказывать услугу или выдавать товар плательщику при получении такого уведомления. Списание средств и оказание услуги следует совершать при выполнении confirmPayment

ERROR: ошибка платежа на любом из этапов. Если ошибка вызвана пустым/ошибочным ответом сервера партнера, то запрос отправлен не будет. Следует учесть, что данный статус не конечный и возможны ситуации, когда после запроса ERROR может последовать запрос PAY.

//адрес_вашего_обработчика?

method=check

params[account]=userId

params[date]=2012-10-01 12:32:00

params[operator]=beeline

params[paymentType]=mc

params[projectId]=1

params[phone]=9XXXXXXXXX

params[payerSum]=10.00

params[payerCurrency]=RUB

params[signature]=9bdf52a4830779a1383ac24f1b3ed054

params[orderSum]=10.00

params[orderCurrency]=RUB

params[unitpayId]=1234567

params[test]=0

Всегда проверяйте IP адреса, с которых приходят запросы к обработчику платежей

ВАЖНО: в системе партнера не должно быть двух разных платежей с одним unitpayId. При получении повторного запроса CHECK или PAY необходимо вернуть результат выполнения предыдущего запроса, ничего не пополняя/зачисляя

Успешный ответ

{"result": {

"message": "Запрос успешно обработан"

}}

Ошибочный ответ

{"error": {

"message": "Описание ошибки"

}}

ВАЖНО: на этапе PAY при любой ошибке (например нет доступа к БД) платеж получит статус «не завершен». После устранения проблем повторите платеж в статистике.

Определение Handler от Merriam-Webster

Хан · Длер | \ ˈHan (d) -lər , ˈHan-dᵊl-ər \

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

б : человек, который тренируется или действует в качестве секунданта боксера.

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

Chelsea Handler - Официальный сайт

21 августа 2021 г. Санта-Барбара Bowl Санта-Барбара, Калифорния Соединенные Штаты
05 сен.2021 Хамфри Сан-Диего, Калифорния Соединенные Штаты
30 сен.2021 Театр Тафт Цинциннати, Огайо Соединенные Штаты
01 октября 2021 г. The Fillmore Detroit Детройт, Мичиган Соединенные Штаты
2 октября 2021 г. Театр Мюрата Индианаполис, Индиана Соединенные Штаты
3 октября 2021 г. Devos Place Гранд-Рапидс, Мичиган Соединенные Штаты
07 октября 2021 г. Крайслер Холл Норфолк, Вирджиния Соединенные Штаты
8 октября 2021 г. ЗАЛ в прямом эфире! Казино Ганновер, Мэриленд Соединенные Штаты
09 октября 2021 г. MGM Northfield Park - Центральная сцена Нортфилд, Огайо Соединенные Штаты
14 октября 2021 г. Театр Орфей Бостон, Массачусетс Соединенные Штаты
15 октября 2021 г. Дворцовый театр Олбани, штат Нью-Йорк Соединенные Штаты
16 октября 2021 г. Beacon Theatre Нью-Йорк, штат Нью-Йорк Соединенные Штаты
17 октября 2021 г. Beacon Theatre Нью-Йорк, штат Нью-Йорк Соединенные Штаты
21 октября 2021 г. Сан-Хосе Сивик Сан-Хосе, Калифорния Соединенные Штаты
22 октября 2021 г. Казино Silver Legacy Resort Рино, Невада Соединенные Штаты
23 октября 2021 г. Центр мероприятий в казино Harrah’s Ak-Chin Марикопа, Аризона Соединенные Штаты
27 октября 2021 г. Театр Махаффи Санкт-ПетербургСанкт-Петербург, Флорида Соединенные Штаты
28 октября 2021 г. The Fillmore Майами-Бич Майами-Бич, Флорида Соединенные Штаты
29 октября 2021 г. Hard Rock Live Орландо, Флорида Соединенные Штаты
30 октября 2021 г. Центр исполнительских искусств Times-Union Джексонвилл, Флорида Соединенные Штаты
04 ноя.2021 Кодак Центр Рочестер, штат Нью-Йорк Соединенные Штаты
05 ноя.2021 Kleinhans Music Hall Буффало, штат Нью-Йорк Соединенные Штаты
06 ноя.2021 Театр Oncenter Crouse Hinds Сиракузы, Нью-Йорк Соединенные Штаты
11 нояб.2021 г. Paramount Theater Денвер, Колорадо Соединенные Штаты
11 нояб.2021 г. Paramount Theater Денвер, Колорадо Соединенные Штаты
12 нояб.2021 г. Чикагский театр Чикаго, Иллинойс Соединенные Штаты
13 нояб.2021 г. Дворцовый театр Колумбус, Огайо Соединенные Штаты
18 нояб.2021 г. Merrill Auditorium Портленд, Мэн Соединенные Штаты
19 нояб.2021 г. Казино Хэмптон Бич Хэмптон, Нью-Хэмпшир Соединенные Штаты
20 нояб.2021 г. Казино Foxwoods Машантукет, Коннектикут Соединенные Штаты
26 нояб.2021 г. Боргата Атлантик-Сити, Нью-Джерси Соединенные Штаты
27 нояб.2021 г. Центр мероприятий Wind Creek Вифлеем, Пенсильвания Соединенные Штаты
2 декабря 2021 г. Театр Орфей Мэдисон, Висконсин Соединенные Штаты
3 декабря 2021 г. Казино Mystic Lake Озеро Приор, Миннесота Соединенные Штаты
4 декабря 2021 г. Миллер High Life Theater Милуоки, Висконсин Соединенные Штаты
09 декабря 2021 г. ACL Live в театре Moody Остин, Техас Соединенные Штаты
11 декабря 2021 г. Музыкальный завод Toyota Ирвинг, Техас Соединенные Штаты
16 декабря 2021 г. Духовки Auditorium Шарлотта, Северная Каролина Соединенные Штаты
17 декабря 2021 г. Кока-Кола Рокси Атланта, Джорджия Соединенные Штаты
18 декабря 2021 г. Аудитория Томаса Вулфа Эшвилл, Северная Каролина Соединенные Штаты

лесозаготовка.обработчики - Обработчики журналов - документация Python 3.9.6

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


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

StreamHandler

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

класс лесозаготовки. StreamHandler ( поток = Нет )

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

излучение (запись )

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

заподлицо ()

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

setStream ( поток )

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

Параметры

stream - поток, который должен использовать обработчик.

Возвращает

старый поток, если поток был изменен, или Нет , если нет.

терминатор

Строка, используемая в качестве признака конца при записи форматированной записи в поток.Значение по умолчанию - '\ n' .

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

В более ранних версиях терминатор был жестко запрограммирован как '\ n' .

FileHandler

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

класс лесозаготовки. FileHandler ( filename , mode = 'a' , encoding = None , delay = False , errors = None )

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

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

Изменено в версии 3.9: Добавлен параметр ошибок .

закрыть ()

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

излучение (запись )

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

NullHandler

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

класс лесозаготовки. NullHandler

Возвращает новый экземпляр класса NullHandler .

излучение (запись )

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

ручка ( запись )

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

createLock ()

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

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

WatchedFileHandler

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

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

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

класс лесозаготовительные. Погрузчики. WatchedFileHandler ( filename , mode = 'a' , encoding = None , delay = False , errors = None )

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

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

Изменено в версии 3.9: Добавлен параметр ошибок .

reopenIfNeeded ()

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

излучение (запись )

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

BaseRotatingHandler

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

класс лесозаготовительные. Погрузчики. BaseRotatingHandler ( filename , mode , encoding = None , delay = False , errors = None )

Параметры такие же, как для FileHandler .Атрибуты:

наименование

Если этот атрибут установлен на вызываемый, Rotation_filename () метод делегирует этому вызываемому объекту. Параметры, переданные вызываемому переданы в Rotation_filename () .

Примечание

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

ротатор

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

имя_файла вращения ( имя_по умолчанию )

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

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

Реализация по умолчанию вызывает атрибут namer обработчика, если он вызываемый, передать ему имя по умолчанию. Если атрибут не вызываемый (по умолчанию Нет ), имя возвращается без изменений.

Параметры

default_name - Имя по умолчанию для файла журнала.

повернуть ( исходный , конечный )

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

Реализация по умолчанию вызывает атрибут «rotator» обработчика, если он вызывается, передача ему аргументов source и dest. Если атрибут не вызывается (по умолчанию Нет ), источник просто переименован в пункт назначения.

Параметры
  • источник - Имя файла источника. Обычно это база имя файла, например ‘Test.log’.

  • dest - Имя файла назначения.Это обычно во что повернут источник, например ‘Test.log.1’.

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

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

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

Поворотный обработчик файлов

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

класс лесозаготовительные. Погрузчики. RotatingFileHandler ( filename , mode = 'a' , maxBytes = 0 , backupCount = 0 , encoding = None , delay = False , errors = None )

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

Вы можете использовать значения maxBytes и backupCount , чтобы разрешить файлу опрокидывает на заданный размер.Когда размер будет превышен, файл закрывается, и новый файл автоматически открывается для вывода. Ролловер происходит каждый раз, когда текущий файл журнала имеет длину около maxBytes ; но если любой из maxBytes или backupCount равен нулю, ролловер никогда не происходит, поэтому обычно вы хотите чтобы установить backupCount как минимум на 1 и иметь ненулевое значение maxBytes . Если значение backupCount не равно нулю, система сохранит старые файлы журнала, добавив расширения ‘.1 ’,‘ .2 ’и т. Д. К имени файла. Например, с резервным копированием Count из 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 для имени файла аргумент .

Изменено в версии 3.9: Добавлен параметр ошибок .

doRollover ()

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

излучение (запись )

Выводит запись в файл, обеспечивая опрокидывание, как описано ранее.

TimedRotatingFileHandler

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

класс лесозаготовительные. Погрузчики. TimedRotatingFileHandler ( filename , when = 'h' , interval = 1 , backupCount = 0 , encoding = None , delay = False , utc = False 9044Time Нет , ошибки = Нет )

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

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

Значение

Тип интервала

Если / как используется atTime

'S'

Секунды

Игнорируется

'M'

Минуты

Игнорируется

'В'

Часы

Игнорируется

'D'

дней

Игнорируется

'W0' - 'W6'

будний день (0 = понедельник)

Используется для вычисления начального время опрокидывания

'полночь'

Перевернуться в полночь, если atTime не указано, иначе во время во время

Используется для вычисления начального время опрокидывания

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

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

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

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

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

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

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

Если указано ошибки , он используется для определения того, как ошибки кодирования обработано.

Примечание

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

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

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

Изменено в версии 3.9: Добавлен параметр ошибок .

doRollover ()

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

излучение (запись )

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

SocketHandler

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

класс лесозаготовительные. Погрузчики. SocketHandler ( хост , порт )

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

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

закрыть ()

Закрывает розетку.

излучать ()

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

handleError ()

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

makeSocket ()

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

makePickle ( запись )

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

 данные = pickle.dumps (record_attr_dict, 1)
datalen = struct.pack ('> L', len (данные))
вернуть данные + данные
 

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

отправить ( пакет )

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

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

createSocket ()

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

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

  • retryStart (начальная задержка, по умолчанию 1,0 секунды).

  • retryFactor (множитель, по умолчанию 2,0).

  • retryMax (максимальная задержка, по умолчанию 30,0 секунд).

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

DatagramHandler

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

класс лесозаготовительные. Погрузчики. DatagramHandler ( хост , порт )

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

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

излучать ()

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

makeSocket ()

Заводской метод SocketHandler здесь переопределен для создания сокет UDP ( socket.SOCK_DGRAM ).

отправить ( с )

Посылает в сокет выделенную байтовую строку. Формат отправляемой байтовой строки как описано в документации для SocketHandler.makePickle () .

SysLogHandler

Класс SysLogHandler , расположенный в журнале .модуль обработчиков , поддерживает отправку сообщений журнала в удаленный или локальный системный журнал Unix.

класс лесозаготовительные. Погрузчики. SysLogHandler ( адрес = ('localhost' , SYSLOG_UDP_PORT) , средство = LOG_USER , socktype = socket.SOCK_DGRAM )

Возвращает новый экземпляр класса SysLogHandler , предназначенный для общаться с удаленной машиной Unix, адрес которой задается как адрес в форма кортежа (хост, порт) .Если адрес не указан, ('localhost', 514) используется. Адрес используется для открытия сокета. An альтернативой предоставлению кортежа (хост, порт) является предоставление адреса как строка, например «/ dev / log». В этом случае сокет домена Unix используется для отправить сообщение в системный журнал. Если объект не указан, 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 .

закрыть ()

Закрывает сокет для удаленного хоста.

излучение (запись )

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

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

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

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

encodePriority ( объект , приоритет )

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

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

Приоритеты

Имя (строка)

Символическое значение

предупреждение

LOG_ALERT

критический или критический

LOG_CRIT

отладка

LOG_DEBUG

аварийный или паника

LOG_EMERG

ошибка или ошибка

LOG_ERR

информация

LOG_INFO

уведомление

LOG_NOTICE

предупредить или предупредить

LOG_WARNING

Объекты

Имя (строка)

Символическое значение

авторизация

LOG_AUTH

authpriv

LOG_AUTHPRIV

крон

LOG_CRON

демон

LOG_DAEMON

ftp

LOG_FTP

ядро ​​

LOG_KERN

л / р

LOG_LPR

почта

LOG_MAIL

новости

LOG_NEWS

Системный журнал

LOG_SYSLOG

пользователь

LOG_USER

uucp

LOG_UUCP

местное 0

LOG_LOCAL0

местный1

LOG_LOCAL1

местное2

LOG_LOCAL2

местное3

LOG_LOCAL3

местное4

LOG_LOCAL4

местное5

LOG_LOCAL5

местное6

LOG_LOCAL6

местное7

LOG_LOCAL7

mapPriority ( имя уровня )

Сопоставляет имя уровня ведения журнала с именем приоритета системного журнала.Возможно, вам придется переопределить это, если вы используете настраиваемые уровни или если алгоритм по умолчанию не подходит для ваших нужд. В алгоритм по умолчанию отображает ОТЛАДКА , ИНФОРМАЦИЯ , ПРЕДУПРЕЖДЕНИЕ , ОШИБКА и CRITICAL к эквивалентным именам системного журнала и всем остальным уровням имена для «предупреждения».

NTEventLogHandler

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

класс лесозаготовительные. Погрузчики. NTEventLogHandler ( appname , dllname = None , logtype = 'Application' )

Возвращает новый экземпляр класса NTEventLogHandler . Имя приложения - используется для определения имени приложения, которое отображается в журнале событий. An соответствующая запись реестра создается с использованием этого имени.Имя библиотеки должно давать полный путь к файлу .dll или .exe, который содержит сообщение определения для хранения в журнале (если не указано, используется 'win32service.pyd' - устанавливается с расширениями Win32 и содержит некоторые базовые определения сообщений-заполнителей. Обратите внимание, что использование этих заполнителей сделает ваши журналы событий большие, так как в журнале содержится весь источник сообщений. если ты хотите более тонкие журналы, вы должны передать имя вашего собственного .dll или .exe, которое содержит определения сообщений, которые вы хотите использовать в журнале событий).В logtype является одним из 'Application' , 'System' or 'Security' , and по умолчанию «Приложение» .

закрыть ()

На этом этапе вы можете удалить имя приложения из реестра как источник записей журнала событий. Однако, если вы это сделаете, вы не сможете чтобы увидеть события, как вы планировали, в средстве просмотра журнала событий - это должно быть может получить доступ к реестру, чтобы получить имя .dll.Текущая версия не делай этого.

излучение (запись )

Определяет идентификатор сообщения, категорию события и тип события, а затем регистрирует сообщение в журнале событий NT.

getEventCategory (запись )

Возвращает категорию события для записи. Отмените это, если хотите укажите свои собственные категории. Эта версия возвращает 0.

getEventType ( запись )

Возвращает тип события для записи.Отмените это, если хотите укажите свои собственные типы. Эта версия выполняет сопоставление с помощью обработчика атрибут typemap, который установлен в __init __ () для словаря который содержит сопоставления для DEBUG , INFO , ПРЕДУПРЕЖДЕНИЕ , ОШИБКА и КРИТИЧЕСКАЯ . Если вы используете ваши собственные уровни, вам нужно будет либо переопределить этот метод, либо разместить подходящий словарь в атрибуте typemap обработчика.

getMessageID ( запись )

Возвращает идентификатор сообщения для записи.Если вы используете свои собственные сообщения, вы можете сделать это, передав регистратору сообщение msg как идентификатор а не строку формата. Тогда здесь вы можете использовать словарь поиск, чтобы получить идентификатор сообщения. Эта версия возвращает 1, что является базовым идентификатор сообщения в win32service.pyd .

Обработчик SMTPHandler

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

класс лесозаготовительные. Погрузчики. SMTPHandler ( mailhost , fromaddr , toaddrs , subject , credentials = None , secure = None , timeout = 1.0 )

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

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

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

Новое в версии 3.3: добавлен аргумент тайм-аут .

излучение (запись )

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

getSubject ( запись )

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

Обработчик Памяти

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

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

класс лесозаготовительные. Погрузчики. BufferingHandler (емкость , )

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

излучение (запись )

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

заподлицо ()

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

shouldFlush (запись )

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

класс лесозаготовительные. Погрузчики. MemoryHandler (емкость , flushLevel = ERROR , target = None , flushOnClose = True )

Возвращает новый экземпляр класса MemoryHandler . Экземпляр инициализируется размером буфера , вместимостью (количество буферизованных записей).Если flushLevel не указан, используется ОШИБКА . Если нет цель указано, цель должна быть установлена ​​с помощью setTarget () перед этим обработчик делает что-нибудь полезное. Если flushOnClose задано как False , тогда буфер , а не сбрасывается при закрытии обработчика. Если не указано или указано как Истинно , предыдущее поведение очистки буфера будет происходят, когда обработчик закрыт.

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

закрыть ()

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

заподлицо ()

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

setTarget ( target )

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

shouldFlush (запись )

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

HTTPHandler

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

класс лесозаготовки.обработчики. HTTPHandler ( host , url ​​, method = 'GET' , secure = False , credentials = None , context = None )

Возвращает новый экземпляр класса HTTPHandler . Хост может быть формы host: port , если вам нужно использовать конкретный номер порта. Если не указан метод , используется GET . Если secure истинно, HTTPS соединение будет использоваться.Параметр контекста может быть установлен на ssl.SSLContext для настройки параметров SSL, используемых для HTTPS-соединение. Если указаны учетные данные , это должен быть кортеж из двух элементов. состоящий из идентификатора пользователя и пароля, который будет помещен в HTTP Заголовок «Авторизация» с использованием обычной аутентификации. Если вы укажете учетные данные, вы также должны указать secure = True, чтобы ваш идентификатор пользователя и пароль не передается в открытом виде по сети.

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

mapLogRecord ( запись )

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

излучение (запись )

Отправляет запись на веб-сервер в виде словаря в кодировке URL. В mapLogRecord () Метод используется для преобразования записи в словарь для отправки.

Обработчик очереди

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

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

класс лесозаготовки.обработчики. Обработчик очереди ( очередь )

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

излучение (запись )

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

подготовить ( запись )

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

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

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

в очередь ( запись )

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

QueueListener

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

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

класс лесозаготовительные. Погрузчики. QueueListener ( очередь , * обработчики , Respect_handler_level = False )

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

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

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

удалить из очереди ( блок )

Удаляет запись из очереди и возвращает ее, при необходимости блокируя.

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

подготовить ( запись )

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

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

ручка ( запись )

Обрабатывать запись.

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

начало ()

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

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

упор ()

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

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

enqueue_sentinel ()

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

См. Также

Модуль ведение журнала

Справочник по API для модуля регистрации.

Модуль логирования.config

API конфигурации для модуля регистрации.

Ведение журнала

- средство ведения журнала для Python - документация Python 3.9.6

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


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

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

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

Основные классы, определенные модулем, вместе с их функциями: перечислено ниже.

  • Регистраторы предоставляют интерфейс, который напрямую использует код приложения.

  • Обработчики отправляют записи журнала (созданные регистраторами) в соответствующие назначения.

  • Фильтры предоставляют более детализированное средство для определения, какие записи журнала для вывода.

  • Средства форматирования определяют структуру записей журнала в окончательном выводе.

Объекты регистратора

Регистраторы

имеют следующие атрибуты и методы. Обратите внимание, что регистраторы должны НИКОГДА не создавайте экземпляры напрямую, а всегда через функцию уровня модуля. logging.getLogger (имя) . Несколько вызовов getLogger () с одним и тем же name всегда будет возвращать ссылку на один и тот же объект Logger.

Имя потенциально является иерархическим значением, разделенным точками, например foo.bar.baz (хотя это также может быть просто foo , например). Регистраторы, расположенные ниже в иерархическом списке, являются потомками регистраторов. выше в списке. Например, для регистратора с именем foo , регистраторы с именами foo.bar , foo.bar.baz и foo.bam - все потомки foo . Иерархия имен логгеров аналогична Python. иерархия пакетов и идентична ей, если вы организуете свои регистраторы на помодульное основание с использованием рекомендованной конструкции лесозаготовка.getLogger (__ имя__) . Это потому, что в модуле __name__ - имя модуля в пространстве имен пакета Python.

класс лесозаготовки. Регистратор
размножить

Если значение этого атрибута истинно, события, регистрируемые в этом регистраторе, будут передается обработчикам регистраторов более высокого уровня (предков), в дополнение к любые обработчики, прикрепленные к этому регистратору. Сообщения передаются непосредственно в обработчики регистраторов предков - ни уровень, ни фильтры предка Рассмотрены рассматриваемые регистраторы.

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

Конструктор устанавливает для этого атрибута значение True .

Примечание

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

комплект Уровень ( уровень )

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

Когда создается регистратор, устанавливается уровень NOTSET (что вызывает все сообщения, которые будут обрабатываться, когда регистратор является корневым регистратором или делегированием родительскому, когда регистратор не является корневым регистратором). Обратите внимание, что корневой регистратор создается с уровнем ПРЕДУПРЕЖДЕНИЕ .

Термин «делегирование родителю» означает, что если регистратор имеет уровень NOTSET, его цепочка регистраторов предков просматривается до тех пор, пока не появится предок с найден уровень, отличный от NOTSET, или достигнут корень.

Если найден предок с уровнем, отличным от NOTSET, то уровень этого предка уровень рассматривается как эффективный уровень регистратора, на котором выполняется поиск предка. началось и используется для определения того, как обрабатывается событие регистрации.

Если корень достигнут, и он имеет уровень NOTSET, то все сообщения будут обработанный. В противном случае уровень корня будет использоваться как эффективный уровень.

Список уровней см. В разделе «Уровни ведения журнала».

Изменено в версии 3.2: параметр level теперь принимает строковое представление уровень, такой как «INFO» в качестве альтернативы целочисленным константам например, ИНФОРМАЦИЯ .Обратите внимание, однако, что уровни хранятся внутри как целые числа, и такие методы, как, например, getEffectiveLevel () и isEnabledFor () вернет / ожидает передачи целых чисел.

isEnabledFor ( уровень )

Указывает, будет ли обработано этим регистратором сообщение с уровнем серьезности . Этот метод сначала проверяет уровень модуля, установленный logging.disable (level) , а затем эффективный уровень регистратора, как определено по getEffectiveLevel () .

getEffectiveLevel ()

Указывает эффективный уровень для этого регистратора. Если значение, отличное от NOTSET был установлен с помощью setLevel () , он возвращается. Иначе, иерархия проходит к корню до тех пор, пока не будет установлено значение, отличное от NOTSET найден, и это значение возвращается. Возвращенное значение целое число, обычно одно из журналов.DEBUG , журналов.INFO пр.

getChild (суффикс )

Возвращает регистратор, который является потомком этого регистратора, как определено суффиксом.Таким образом, logging.getLogger ('abc'). GetChild ('def.ghi') вернет то же самое logger, как будет возвращено logging.getLogger ('abc.def.ghi') . Это удобный метод, полезный, когда родительский регистратор назван с использованием, например, __name__ а не буквальную строку.

отладка ( сообщение , * args , ** kwargs )

Регистрирует сообщение с уровнем ОТЛАДКА на этом регистраторе. msg - это строка формата сообщения, а args - это аргументы, которые объединяются в msg с использованием оператора форматирования строки. (Обратите внимание, что это означает, что вы можете используйте ключевые слова в строке формата вместе с одним аргументом словаря.) Операция% форматирования не выполняется для сообщения msg , если args не предоставлены.

В kwargs есть четыре аргумента ключевого слова, которые проверяются: exc_info , stack_info , stacklevel и extra .

Если exc_info не оценивается как ложь, это вызывает информацию об исключении. добавлен в сообщение журнала. Если кортеж исключения (в формате, возвращаемом sys.exc_info () ) или предоставляется экземпляр исключения, он используется; в противном случае вызывается sys.exc_info () для получения информации об исключении.

Второй необязательный аргумент ключевого слова - stack_info , по умолчанию Ложь . Если true, информация о стеке добавляется в журнал. сообщение, включая фактический вызов журнала.Обратите внимание, что это не то же самое информация стека, отображаемая путем указания exc_info : Первый - это кадры стека от нижней части стека до вызова журналирования в текущем потоке, тогда как последний - это информация о кадрах стека которые были размотаны после исключения при поиске обработчики исключений.

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

 Стек (последний звонок последний):
 

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

Третий необязательный аргумент ключевого слова - stacklevel , по умолчанию 1 . Если больше 1, соответствующее количество кадров стека пропускается. при вычислении номера строки и имени функции, установленных в LogRecord создан для события регистрации.Это можно использовать в помощниках по ведению журнала, чтобы записанное имя функции, имя файла и номер строки не являются информацией для вспомогательной функции / метода, а скорее для ее вызывающей стороны. Название этого параметр отражает эквивалентный параметр в модуле предупреждений .

Четвертый аргумент ключевого слова - дополнительных , которые можно использовать для передачи словарь, который используется для заполнения __dict__ из LogRecord создан для события регистрации с определенными пользователем атрибутами.Эти обычай Затем атрибуты можно использовать по своему усмотрению. Например, они могли быть включены в зарегистрированные сообщения. Например:

 FORMAT = '% (asctime) -15s% (clientip) s% (user) -8s% (message) s'
logging.basicConfig (формат = ФОРМАТ)
d = {'clientip': '192.168.0.1', 'пользователь': 'fbloggs'}
logger = logging.getLogger ('tcpserver')
logger.warning ('Проблема протокола:% s', 'сброс соединения', extra = d)
 

напечатает что-то вроде

 08.02.2006 22: 20: 02,165 192.168.0.1 fbloggs Проблема протокола: сброс соединения
 

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

Если вы решите использовать эти атрибуты в регистрируемых сообщениях, вам необходимо некоторая осторожность. В приведенном выше примере, например, Formatter был настроить со строкой формата, которая ожидает "clientip" и "user" в атрибуте словарь LogRecord . Если они отсутствуют, сообщение будет не будут регистрироваться, потому что произойдет исключение форматирования строки.Итак, в этом случае вам всегда нужно передавать дополнительный словарь с этими ключами.

Хотя это может раздражать, эта функция предназначена для использования в специализированных обстоятельства, такие как многопоточные серверы, где один и тот же код выполняется в многие контексты и интересные условия, которые возникают, зависят от этого контекст (например, IP-адрес удаленного клиента и аутентифицированное имя пользователя в пример выше). В таких условиях вполне вероятно, что специализированные Formatter s будет использоваться с конкретным Handler s.

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

Изменено в версии 3.5: параметр exc_info теперь может принимать экземпляры исключений.

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

информация ( сообщение , * args , ** kwargs )

Записывает сообщение с уровнем ИНФОРМАЦИЯ в этот регистратор. Аргументы интерпретируется как debug () .

предупреждение ( сообщение , * args , ** kwargs )

Регистрирует сообщение с уровнем ПРЕДУПРЕЖДЕНИЕ на этом регистраторе. Аргументы интерпретируется как debug () .

Примечание

Существует устаревший метод warn , который функционально идентично предупреждению . Поскольку предупреждение устарело, не используйте it - вместо этого используйте предупреждение .

ошибка ( msg , * args , ** kwargs )

Записывает в журнал сообщение с уровнем ОШИБКА . Аргументы интерпретируется как debug () .

критический ( сообщение , * args , ** kwargs )

Записывает в этот регистратор сообщение с уровнем КРИТИЧЕСКИЙ . Аргументы интерпретируется как debug () .

журнал ( уровень , msg , * args , ** kwargs )

Записывает в этот регистратор сообщение с целочисленным уровнем и уровнем . Другие аргументы интерпретируется как debug () .

исключение ( сообщение , * args , ** kwargs )

Записывает в журнал сообщение с уровнем ОШИБКА .Аргументы интерпретируется как debug () . Информация об исключении добавляется в журнал сообщение. Этот метод следует вызывать только из обработчика исключений.

addFilter ( фильтр )

Добавляет указанный фильтр фильтр к этому регистратору.

removeFilter ( фильтр )

Удаляет указанный фильтр filter из этого регистратора.

фильтр ( запись )

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

addHandler ( hdlr )

Добавляет указанный обработчик hdlr к этому регистратору.

removeHandler ( hdlr )

Удаляет указанный обработчик hdlr из этого регистратора.

findCaller ( stack_info = False , stacklevel = 1 )

Находит исходное имя файла вызывающего абонента и номер строки. Возвращает имя файла, строку номер, имя функции и информация о стеке в виде четырехэлементного кортежа. Стек информация возвращается как Нет , если stack_info не равно Истина .

Параметр stacklevel передается из кода, вызывающего debug () и другие API. Если больше 1, избыток используется для пропуска кадров стека. перед определением возвращаемых значений. Обычно это будет полезно при вызове API журналирования из кода помощника / оболочки, чтобы информация в журнале событий относится не к коду помощника / оболочки, а к коду, который называет это.

ручка ( запись )

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

makeRecord ( имя , уровень , fn , lno , msg , args , exc_info , func = None , extra = None ), extra = None

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

hasHandlers ()

Проверяет, настроены ли для этого средства ведения журнала какие-либо обработчики. Это делается ищет обработчики в этом регистраторе и его родителях в иерархии регистратора. Возвращает Истинно , если обработчик был найден, иначе Ложь . Метод прекращает поиск вверх по иерархии всякий раз, когда регистратор с атрибутом "распространять" установлен на false - это будет последний регистратор, который проверяется на наличие обработчиков.

Изменено в версии 3.7: Лесорубы теперь можно мариновать и не мариновать.

Уровни регистрации

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

Уровень

Числовое значение

КРИТИЧЕСКИЙ

50

ОШИБКА

40

ПРЕДУПРЕЖДЕНИЕ

30

ИНФОРМАЦИЯ

20

ОТЛАДКА

10

ПРИМЕЧАНИЕ

0

Объекты-обработчики

Обработчики

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

класс лесозаготовки. Погрузчик
__init__ (уровень = NOTSET )

Инициализирует экземпляр Handler , задав его уровень, задав список фильтров в пустой список и создание блокировки (с помощью createLock () ) для сериализованный доступ к механизму ввода-вывода.

createLock ()

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

приобрести ()

Получает блокировку потока, созданную с помощью createLock () .

выпуск ()

Освобождает блокировку потока, полученную с помощью Acquire () .

комплект Уровень ( уровень )

Устанавливает порог для этого обработчика на уровень . Регистрация сообщений, которые менее серьезный, чем уровень , будет проигнорирован. При создании обработчика уровень установлен на NOTSET (что приводит к тому, что все сообщения обработанный).

Список уровней см. В разделе «Уровни ведения журнала».

Изменено в версии 3.2: параметр level теперь принимает строковое представление уровень, такой как «INFO» в качестве альтернативы целочисленным константам например, ИНФОРМАЦИЯ .

setFormatter ( fmt )

Устанавливает Formatter для этого обработчика на fmt .

addFilter ( фильтр )

Добавляет указанный фильтр filter к этому обработчику.

removeFilter ( фильтр )

Удаляет указанный фильтр filter из этого обработчика.

фильтр ( запись )

Примените фильтры этого обработчика к записи и верните Истина , если запись подлежит обработке. Фильтры проверяются по очереди, пока один из они возвращают ложное значение. Если ни один из них не возвращает ложное значение, запись будет выпущен. Если возвращается ложное значение, обработчик не будет выдавать записывать.

заподлицо ()

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

закрыть ()

Уберите все ресурсы, используемые обработчиком. Эта версия не выводит данные, но удаляет обработчик из внутреннего списка обработчиков, который закрывается, когда Вызывается shutdown () . Подклассы должны гарантировать, что это будет вызвано из переопределенных методов close () .

ручка ( запись )

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

ручка Ошибка ( запись )

Этот метод должен вызываться из обработчиков при обнаружении исключения во время вызова emit () . Если атрибут уровня модуля raiseExceptions is False , исключения игнорируются. Это то, что в основном требуется для системы ведения журнала - большинство пользователей не заботятся о ошибки в системе логирования, их больше интересует приложение ошибки.Однако вы можете заменить это специальным обработчиком, если хотите. Указанная запись - это та, которая обрабатывалась, когда исключение произошел. (Значение по умолчанию raiseExceptions - True , так как это полезнее во время разработки).

формат ( запись )

Выполните форматирование для записи - если установлен форматтер, используйте его. В противном случае используйте модуль форматирования по умолчанию для модуля.

излучение (запись )

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

Список стандартных обработчиков см. В разделе logging.handlers .

Объекты форматирования

Объекты Formatter имеют следующие атрибуты и методы. Они есть отвечает за преобразование LogRecord в (обычно) строку, которая может интерпретироваться человеком или внешней системой.База Formatter позволяет указать строку форматирования. Если нет при поставке используется значение по умолчанию '% (message) s' , которое просто включает сообщение в журнале вызова. Чтобы иметь дополнительную информацию в форматированный вывод (например, отметка времени), продолжайте читать.

Formatter может быть инициализирован строкой формата, использующей знания атрибутов LogRecord - например, значение по умолчанию, упомянутое выше используя тот факт, что сообщение и аргументы пользователя предварительно отформатированы в атрибут сообщения LogRecord '.Эта строка формата содержит стандартные ключи сопоставления Python% -style. See section Форматирование строк в стиле printf для получения дополнительной информации о форматировании строк.

Полезные ключи сопоставления в LogRecord приведены в разделе, посвященном Атрибуты LogRecord.

класс лесозаготовки. Formatter ( fmt = None , datefmt = None , style = '%' , validate = True )

Возвращает новый экземпляр класса Formatter .Экземпляр инициализируется строкой формата для сообщения в целом, а также строка формата для части даты / времени сообщения. Если нет fmt это указано, используется '% (message) s' . Если не указан datefmt , формат используется, что описано в документации formatTime () .

Параметр стиля может быть одним из "%", "{" или "$" и определяет, как строка формата будет объединена с ее данными: с использованием одного из% -форматирования, ул.format () или строка. Шаблон . Это относится только к строка формата fmt (например, '% (message) s' или {message} ), а не фактические сообщения журнала передаются в Logger.debug и т. д .; видеть Использование определенных стилей форматирования в вашем приложении для получения дополнительной информации об использовании {- и $ -formatting для сообщений журнала.

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

Изменено в версии 3.8: добавлен параметр validate .Неправильный или несоответствующий стиль и формат вызовет ValueError . Например: logging.Formatter ('% (asctime) s -% (message) s',) .

формат ( запись )

Словарь атрибутов записи используется как операнд для строки операция форматирования. Возвращает результирующую строку. Перед форматированием словаря, проводится пара подготовительных шагов. Сообщение Атрибут записи вычисляется с использованием msg % args .Если строка форматирования содержит '(asctime)' , вызывается formatTime () для форматирования времени события. Если есть информация об исключении, это отформатирован с использованием formatException () и добавлен к сообщению. Примечание что отформатированная информация об исключении кэшируется в атрибуте exc_text . Это полезно, потому что информация об исключении может быть мариновать и отправлять по проволоке, но будьте осторожны, если у вас есть более одного подкласса Formatter , который настраивает форматирование информации об исключении.В этом случае вам нужно будет очистить кешированный значение после того, как форматтер выполнил свое форматирование, так что следующий средство форматирования для обработки события не использует кешированное значение, а пересчитывает его заново.

Если доступна информация о стеке, она добавляется после исключения. информации, используя formatStack () для ее преобразования при необходимости.

formatTime ( запись , datefmt = None )

Этот метод должен вызываться из формата () с помощью средства форматирования, которое хочет использовать форматированное время.Этот метод можно переопределить в средства форматирования, чтобы обеспечить выполнение любых конкретных требований, но основное поведение выглядит следующим образом: если указан datefmt (строка), он используется с time.strftime () для форматирования времени создания записывать. В противном случае используется формат «% Y-% m-% d% H:% M:% S, uuu», где uuu - это значение в миллисекундах, а остальные буквы соответствуют time.strftime () документация. Пример времени в этом формате: 23.01.2003 00: 29: 50, 411 .Возвращается результирующая строка.

Эта функция использует настраиваемую пользователем функцию для преобразования создания время до кортежа. По умолчанию используется time.localtime () ; изменить это для конкретного экземпляра средства форматирования, установите атрибут преобразователя в функцию с той же сигнатурой, что и time.localtime () или time.gmtime () . Чтобы изменить его для всех форматеров, например, если вы хотите, чтобы все времена регистрации отображались в GMT, установите преобразователь атрибут в классе Formatter .

Изменено в версии 3.3: Ранее формат по умолчанию был жестко запрограммирован, как в этом примере: 2010-09-06 22: 38: 15,292 где часть перед запятой обрабатывается строкой формата strptime ( '% Y-% m-% d% H:% M:% S' ), а часть после запятой - это значение в миллисекундах. Поскольку strptime не иметь заполнитель формата для миллисекунд, значение миллисекунды добавлено с использованием другой строки формата, '% s,% 03d' - и обе эти Строки формата жестко запрограммированы в этот метод.С изменением, эти строки определены как атрибуты уровня класса, которые могут быть при необходимости переопределить на уровне экземпляра. Имена атрибуты: default_time_format (для строки формата strptime) и default_msec_format (для добавления значения миллисекунды).

Изменено в версии 3.9: default_msec_format может быть Нет .

formatException ( exc_info )

Форматирует указанную информацию об исключении (стандартный кортеж исключений как возвращено sys.exc_info () ) в виде строки. Эта реализация по умолчанию просто использует traceback.print_exception () . Результирующая строка вернулся.

formatStack ( stack_info )

Форматирует указанную информацию стека (строку, возвращаемую traceback.print_stack () , но с удаленной последней новой строкой) как нить. Эта реализация по умолчанию просто возвращает входное значение.

Фильтровать объекты

Фильтры могут использоваться обработчиками и регистраторами для более сложных фильтрация, чем это предусмотрено по уровням.Базовый класс фильтра разрешает только события которые находятся ниже определенной точки в иерархии регистраторов. Например, фильтр инициализированный с помощью «A.B» разрешит события, регистрируемые регистраторами «A.B», «A.B.C», «A.B.C.D», «A.B.D» и т. Д., Но не «A.BB», «B.A.B» и т. Д. пустая строка, все события передаются.

класс лесозаготовки. Фильтр ( name = '' )

Возвращает экземпляр класса Filter . Если указано имя , оно именует регистратор, который вместе со своими дочерними элементами будет иметь разрешенные события через фильтр.Если имя - пустая строка, разрешает каждое событие.

фильтр ( запись )

Должна ли регистрироваться указанная запись? Возвращает ноль, если нет, ненулевое значение, если да. Если это будет сочтено целесообразным, запись может быть изменена на месте этим метод.

Обратите внимание, что фильтры, прикрепленные к обработчикам, проверяются до того, как событие генерируется обработчиком, тогда как фильтры, прикрепленные к регистраторам, консультируются всякий раз, когда событие регистрируется (используя debug () , info () , и т.п.) перед отправкой события обработчикам. Это означает, что события, имеющие были сгенерированы дочерними регистраторами, не будут отфильтрованы фильтром регистратора , если фильтр также не был применен к этим потомкам регистратора.

На самом деле вам не нужно создавать подкласс Фильтр : вы можете передать любой экземпляр который имеет метод filter с той же семантикой.

Изменено в версии 3.2: вам не нужно создавать специализированные классы Filter или использовать другие классы с фильтром Метод : вы можете использовать функцию (или другой вызываемый) как фильтр.Логика фильтрации проверит, объект имеет атрибут filter : если это так, предполагается, что это Вызывается Filter и его метод filter () . В противном случае это считается вызываемым и вызывается с записью как сингл параметр. Возвращаемое значение должно соответствовать возвращаемому фильтр () .

Хотя фильтры используются в основном для фильтрации записей на основе более сложных критериев, чем уровни, они могут увидеть каждую запись, которая обрабатываются обработчиком или регистратором, к которому они прикреплены: это может быть полезно, если вы хотите делать такие вещи, как подсчет количества записей, обработанных конкретный регистратор или обработчик, или добавление, изменение или удаление атрибутов в обрабатывается LogRecord .Очевидно изменение потребностей LogRecord нужно делать с осторожностью, но это позволяет вводить контекстные информацию в журналы (см. Использование фильтров для передачи контекстной информации).

Объекты LogRecord

LogRecord экземпляров создаются автоматически Logger каждый раз, когда что-то регистрируется, и может быть создано вручную с помощью makeLogRecord () (например, из маринованного события, полученного через провод).

класс лесозаготовки. LogRecord ( имя , уровень , путь , белье , msg , args , exc_info , func = None , sinfo45 = None)

Содержит всю информацию, относящуюся к регистрируемому событию.

Первичная информация передается в msg и args , которые объединяются с использованием msg% args для создания поля сообщения поля записывать.

Параметры
  • имя - Имя регистратора, используемого для регистрации события, представленного это LogRecord. Обратите внимание, что это имя всегда будет иметь это значение, даже если оно может быть отправлено обработчиком, прикрепленным к другой (предок) регистратор.

  • уровень - Числовой уровень события регистрации (один из DEBUG, INFO и т. Д.) Обратите внимание, что это преобразовано в два атрибута LogRecord: levelno для числового значения и levelname для название соответствующего уровня.

  • pathname - Полный путь к исходному файлу, в котором выполняется запись в журнал. сделан.

  • cabin - Номер строки в исходном файле, в которой был зарегистрирован вызов. сделал.

  • msg - Сообщение с описанием события, возможно, строка формата с заполнители для переменных данных.

  • args - Переменные данные для объединения в аргумент msg для получения Описание события.

  • exc_info - Кортеж исключения с текущей информацией об исключении, или Нет , если информация об исключении недоступна.

  • func - Имя функции или метода, из которых вызывается ведение журнала. был вызван.

  • sinfo - Текстовая строка, представляющая информацию стека из базы стек в текущем потоке до вызова журнала.

getMessage ()

Возвращает сообщение для этого экземпляра LogRecord после слияния любых предоставленные пользователем аргументы с сообщением.Если пользовательское сообщение аргумент вызова журнала не является строкой, для него вызывается str () . преобразовать его в строку. Это позволяет использовать определяемые пользователем классы как сообщения, чей метод __str__ может возвращать фактическую строку формата в использоваться.

Изменено в версии 3.2: Создание LogRecord стало более настраиваемым за счет предоставление фабрики, которая используется для создания записи. Завод может быть установить с помощью getLogRecordFactory () и setLogRecordFactory () (см. подпись завода).

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

 old_factory = logging.getLogRecordFactory ()

def record_factory (* args, ** kwargs):
    запись = old_factory (* аргументы, ** kwargs)
    record.custom_attribute = 0xdecafbad
    возвратная запись

logging.setLogRecordFactory (record_factory)
 

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

Атрибуты LogRecord

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

Если вы используете {} -форматирование ( str.format () ), вы можете использовать {attrname} в качестве заполнителя в строке формата. Если вы используете $ -formatting ( string.Template ), используйте форму $ {attrname} . В в обоих случаях, конечно, заменить attrname на фактическое имя атрибута вы хотите использовать.

В случае {} -форматирования вы можете указать флаги форматирования, поместив их после имени атрибута, отделенного от него двоеточием.Например: a заполнитель {msecs: 03d} форматирует значение в миллисекундах 4 как 004 . Обратитесь к документации str.format () для получения полной информации о доступные вам варианты.

Имя атрибута

Формат

Описание

аргументы

Не нужно отформатируйте это сами.

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

asctime

% (asctime) с

Время, удобное для чтения, когда LogRecord создан. По умолчанию это имеет форму "2003-07-08 16: 49: 45,896" (числа после запятой - миллисекунды часть времени).

создано

% (создано) f

Время создания LogRecord (как возвращено time.time () ).

exc_info

Не нужно отформатируйте это сами.

Исключительный кортеж (как sys.exc_info ) или если исключение не произошло, Нет .

имя файла

% (имя файла) s

Имя файла - часть пути .

имя_функции

% (funcName) s

Имя функции, содержащей вызов регистрации.

имя уровня

% (имя уровня) s

Уровень записи текста для сообщения ( 'ОТЛАДКА' , 'ИНФОРМАЦИЯ' , 'ПРЕДУПРЕЖДЕНИЕ' , 'ОШИБКА' , 'КРИТИЧЕСКАЯ' ).

уровень №

% (levelno) с

Числовой уровень ведения журнала для сообщения ( ОТЛАДКА , ИНФОРМАЦИЯ , ПРЕДУПРЕЖДЕНИЕ , ОШИБКА , КРИТИЧЕСКИЙ ).

белье

% (льняной) d

Номер исходной строки, в которой был зарегистрирован вызов выдан (при наличии).

сообщение

% (сообщение) с

Зарегистрированное сообщение, вычисленное как msg% args . Это устанавливается, когда Вызывается Formatter.format () .

модуль

% (модуль) с

Модуль (часть имени имя файла ).

мс

% (мсек) d

Миллисекундная часть времени, когда LogRecord создан.

сообщение

Не нужно отформатируйте это сами.

Строка формата, переданная в оригинале. запись звонка. Объединено с аргументами в создать сообщение или произвольный объект (см. Использование произвольных объектов в качестве сообщений).

наименование

% (ФИО) с

Имя регистратора, используемого для регистрации вызова.

путь

% (путь) с

Полный путь к исходному файлу, в котором был выдан вызов регистрации (при наличии).

процесс

% (процесс) d

Идентификатор процесса (при наличии).

Имя процесса

% (processName) s

Имя процесса (если доступно).

родственник Создан

% (relativeCreated) d

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

stack_info

Не нужно отформатируйте это сами.

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

резьба

% (резьба) d

ID резьбы (при наличии).

Название резьбы

% (threadName) с

Название резьбы (при наличии).

Изменено в версии 3.1: добавлено processName .

Объекты адаптера регистратора

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

класс лесозаготовки. Адаптер регистратора ( регистратор , дополнительный )

Возвращает экземпляр LoggerAdapter , инициализированный с помощью базовый экземпляр Logger и dict-подобный объект.

процесс ( сообщение , kwargs )

Изменяет аргументы сообщения и / или ключевого слова, передаваемые вызову регистрации в чтобы вставить контекстную информацию. Эта реализация принимает объект передается конструктору как extra и добавляет его к kwargs с помощью ключа 'дополнительный'. Возвращаемое значение - кортеж ( msg , kwargs ), который имеет (возможно, измененные) версии переданных аргументов.

В дополнение к вышесказанному, LoggerAdapter поддерживает следующие методы регистратора : debug () , info () , предупреждение () , ошибка () , исключение () , критический () , журнал () , isEnabledFor () , getEffectiveLevel () , setLevel () и hasHandlers () . Эти методы имеют те же сигнатуры, что и их аналоги в Logger , поэтому вы можете использовать два типа экземпляров взаимозаменяемо.

Безопасность резьбы

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

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

Функции на уровне модуля

В дополнение к классам, описанным выше, существует ряд модулей уровня функции.

лесозаготовка. getLogger ( name = None )

Вернуть регистратор с указанным именем или, если имя Нет , вернуть logger, который является корневым регистратором иерархии.Если указано, имя обычно иерархическое имя, разделенное точками, например ‘a’ , ‘a.b’ или ‘a.b.c.d’ . Выбор этих имен полностью зависит от разработчика, использующего ведение журнала.

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

лесозаготовка. getLoggerClass ()

Вернуть либо стандартный класс Logger , либо последний класс, переданный в setLoggerClass () .Эта функция может быть вызвана из нового класса определение, чтобы гарантировать, что установка настроенного класса Logger будет не отменять настройки, уже примененные другим кодом. Например:

 класс MyLogger (logging.getLoggerClass ()):
    # ... здесь переопределить поведение
 
лесозаготовка. getLogRecordFactory ()

Вернуть вызываемый объект, который используется для создания LogRecord .

Новое в версии 3.2: Эта функция была предоставлена ​​вместе с setLogRecordFactory () , чтобы дать разработчикам больше контроля над тем, как LogRecord представляет собой событие регистрации.

См. setLogRecordFactory () для получения дополнительной информации о том, как завод называется.

лесозаготовка. отладка ( сообщение , * args , ** kwargs )

Регистрирует сообщение с уровнем DEBUG в корневом регистраторе. msg - это строка формата сообщения, а args - это аргументы, которые объединяются в msg с использованием оператора форматирования строки. (Обратите внимание, что это означает, что вы можете используйте ключевые слова в строке формата вместе с одним аргументом словаря.)

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

Второй необязательный аргумент ключевого слова - stack_info , по умолчанию Ложь . Если true, информация о стеке добавляется в журнал. сообщение, включая фактический вызов журнала. Обратите внимание, что это не то же самое информация стека, отображаемая путем указания exc_info : Первый - это кадры стека от нижней части стека до вызова журналирования в текущем потоке, тогда как последний - это информация о кадрах стека которые были размотаны после исключения при поиске обработчики исключений.

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

 Стек (последний звонок последний):
 

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

Третий необязательный аргумент ключевого слова - extra , который можно использовать для передачи словарь, который используется для заполнения __dict__ LogRecord, созданного для событие регистрации с определенными пользователем атрибутами.Затем эти настраиваемые атрибуты можно можно использовать по своему усмотрению. Например, они могут быть включены в зарегистрированные Сообщения. Например:

 FORMAT = '% (asctime) -15s% (clientip) s% (user) -8s% (message) s'
logging.basicConfig (формат = ФОРМАТ)
d = {'clientip': '192.168.0.1', 'пользователь': 'fbloggs'}
logging.warning ('Проблема протокола:% s', 'сброс соединения', extra = d)
 

напечатает что-то вроде:

 08.02.2006 22: 20: 02,165 192.168.0.1 fbloggs Проблема протокола: сброс соединения
 

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

Если вы решите использовать эти атрибуты в регистрируемых сообщениях, вам необходимо некоторая осторожность. В приведенном выше примере, например, Formatter был настроить со строкой формата, которая ожидает "clientip" и "user" в атрибуте словарь LogRecord. Если они отсутствуют, сообщение не будет регистрируется, потому что произойдет исключение форматирования строки.Итак, в этом случае вы всегда нужно передавать дополнительный словарь с этими ключами.

Хотя это может раздражать, эта функция предназначена для использования в специализированных обстоятельства, такие как многопоточные серверы, где один и тот же код выполняется в многие контексты и интересные условия, которые возникают, зависят от этого контекст (например, IP-адрес удаленного клиента и аутентифицированное имя пользователя в пример выше). В таких условиях вполне вероятно, что специализированные Formatter s будет использоваться с конкретным Handler s.

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

лесозаготовка. info ( msg , * args , ** kwargs )

Регистрирует сообщение с уровнем ИНФОРМАЦИЯ в корневом регистраторе. Аргументы интерпретируется как debug () .

лесозаготовка. предупреждение ( msg , * args , ** kwargs )

Регистрирует сообщение с уровнем WARNING в корневом регистраторе.Аргументы интерпретируются как debug () .

Примечание

Имеется устаревшая функция предупреждать , которая функционально идентично предупреждению . Поскольку предупреждение устарело, не используйте it - вместо этого используйте предупреждение .

лесозаготовка. ошибка ( сообщение , * args , ** kwargs )

Регистрирует сообщение с уровнем ОШИБКА в корневом регистраторе.Аргументы интерпретируется как debug () .

лесозаготовка. критический ( сообщение , * args , ** kwargs )

Регистрирует сообщение с уровнем КРИТИЧЕСКИЙ в корневом регистраторе. Аргументы интерпретируются как debug () .

лесозаготовка. исключение ( сообщение , * args , ** kwargs )

Регистрирует сообщение с уровнем ОШИБКА в корневом регистраторе.Аргументы интерпретируется как debug () . Информация об исключении добавляется в журнал сообщение. Эта функция должна вызываться только из обработчика исключений.

лесозаготовка. журнал ( уровень , msg , * args , ** kwargs )

Регистрирует сообщение с уровнем и уровнем в корневом регистраторе. Другие аргументы интерпретируется как debug () .

Примечание

Указанные выше вспомогательные функции на уровне модуля, которые делегируют корневого регистратора, вызовите basicConfig () , чтобы убедиться, что хотя бы один обработчик доступен.Из-за этого в потоках следует использовать , а не , в версиях Python до 2.7.1 и 3.2, если хотя бы один обработчик был добавлен к корневому регистратору перед тем, как потоки начал. В более ранних версиях Python из-за недостатка безопасности потоков в basicConfig () это может (в редких случаях) привести к обработчики добавляются несколько раз к корневому регистратору, который, в свою очередь, может привести к нескольким сообщениям для одного и того же события.

лесозаготовка. отключить (уровень = КРИТИЧЕСКИЙ )

Обеспечивает приоритетный уровень уровень для всех регистраторов, который имеет приоритет над собственный уровень регистратора. Когда возникает необходимость временно ограничить ведение журнала вывод вниз по всему приложению, эта функция может быть полезной. Его эффект заключается в отключении всех вызовов журналирования с уровнем серьезности и ниже, так что если вы вызовете его со значением INFO, тогда все события INFO и DEBUG будут отброшены, тогда как сообщения серьезности WARNING и выше будут обработаны в соответствии с эффективным уровнем регистратора.Если logging.disable (logging.NOTSET) Вызывается , он эффективно удаляет это уровень переопределения, так что вывод журнала снова зависит от эффективного уровни индивидуальных регистраторов.

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

Изменено в версии 3.7: Параметр уровня по умолчанию был установлен на уровень КРИТИЧЕСКИЙ .Видеть bpo-28524 для получения дополнительной информации об этом изменении.

лесозаготовка. addLevelName ( уровень , levelName )

Associates level level с текстом levelName во внутреннем словаре, который используется для отображения числовых уровней в текстовое представление, например, когда Formatter форматирует сообщение. Эту функцию также можно использовать для определения свои собственные уровни. Единственное ограничение состоит в том, что все используемые уровни должны быть зарегистрированные с помощью этой функции, уровни должны быть положительными целыми числами, и они должен увеличиваться в порядке возрастания серьезности.

Примечание

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

лесозаготовка. getLevelName ( уровень )

Возвращает текстовое или числовое представление уровня ведения журнала уровень .

Если уровень является одним из предопределенных уровней КРИТИЧЕСКИЙ , ОШИБКА , WARNING , INFO or DEBUG , то вы получите соответствующая строка.Если вы связали уровни с именами, используя addLevelName () , то имя, которое вы связали с level , будет вернулся. Если числовое значение, соответствующее одному из определенных уровней, равно передается, возвращается соответствующее строковое представление.

Параметр level также принимает строковое представление уровня, например как «ИНФОРМАЦИЯ». В таких случаях эта функция возвращает соответствующий числовой значение уровня.

Если подходящее числовое или строковое значение не передается, строка "Уровень% s"% уровень возвращается.

Примечание

Уровни являются внутренне целыми числами (так как их нужно сравнивать в логика регистрации). Эта функция используется для преобразования между целочисленным уровнем и имя уровня, отображаемое в выводе форматированного журнала с помощью % (levelname) s спецификатор формата (см. Атрибуты LogRecord) и наоборот.

Изменено в версии 3.4: В версиях Python ранее, чем 3.4, этой функции также можно было передать текстовый уровень и вернет соответствующее числовое значение уровня.Это недокументированное поведение было сочтено ошибкой и было удалено в Python 3.4, но восстановлен в 3.4.2 из-за сохранения обратной совместимости.

лесозаготовка. makeLogRecord ( attrdict )

Создает и возвращает новый экземпляр LogRecord , атрибуты которого определено attrdict . Эта функция полезна для взятия маринованных Словарь атрибутов LogRecord , отправленный через сокет и воссоздание это как экземпляр LogRecord на принимающей стороне.

лесозаготовка. basicConfig ( ** kwargs )

Выполняет базовую настройку системы регистрации путем создания StreamHandler со стандартным Formatter и добавив его в корневой регистратор. Функции debug () , info () , warning () , error () и critical () автоматически вызовет basicConfig () если для корневого регистратора не определены обработчики.

Эта функция ничего не делает, если у корневого регистратора уже есть обработчики. настроен, если аргумент ключевого слова force не установлен на True .

Примечание

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

Поддерживаются следующие аргументы ключевого слова.

Формат

Описание

имя файла

Определяет создание FileHandler, используя указанное имя файла, а не StreamHandler.

файловый режим

Если указано имя_файла , открыть файл в этом режиме.По умолчанию на '.

формат

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

datefmt

Использовать указанный формат даты / времени, как принято time.strftime () .

стиль

Если указан формат , используйте этот стиль для строки формата.Один из % , '{' или '$ для стиля printf, str.format () или строка. Шаблон соответственно. По умолчанию % .

уровень

Установить уровень корневого регистратора на указанный уровень.

поток

Используйте указанный поток для инициализации StreamHandler. Обратите внимание, что этот аргумент несовместимо с имя файла - если оба присутствуют, возникает ошибка ValueError .

манипуляторы

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

усилие

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

кодировка

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

ошибки

Если этот аргумент ключевого слова указан вместе с имя_файла , его значение используется, когда FileHandler создается и поэтому используется, когда открытие выходного файла.Если не указано, используется значение «обратная косая черта». Примечание что если None не указано, он будет передано как таковое в func: open , что означает что это будет рассматриваться так же, как передача «Ошибки».

Изменено в версии 3.2: добавлен аргумент стиля .

Изменено в версии 3.3: добавлен аргумент обработчиков . Добавлены дополнительные проверки в поймать ситуации, когда указаны несовместимые аргументы (например,грамм. обработчики вместе с потоком или имя файла , или поток вместе с имя файла ).

Изменено в версии 3.8: добавлен аргумент force .

Изменено в версии 3.9: кодирования ошибок и были добавлены аргументы .

лесозаготовка. выключение ()

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

Когда модуль регистрации импортируется, он регистрирует эту функцию как выход обработчик (см. atexit ), поэтому обычно в этом нет необходимости вручную.

лесозаготовка. setLoggerClass ( класс )

Указывает системе ведения журнала использовать класс klass при создании экземпляра средства ведения журнала.Класс должен определять __init __ () так, чтобы был только аргумент имени. требуется, а __init __ () должен вызывать Logger .__ init __ () . Этот функция обычно вызывается до того, как приложения будут созданы для каких-либо регистраторов. которым необходимо использовать настраиваемое поведение регистратора. После этого звонка, как и при любом другом время, не создавайте экземпляры регистраторов напрямую с помощью подкласса: продолжайте использовать API logging.getLogger () для получения ваших регистраторов.

лесозаготовка. setLogRecordFactory ( завод )

Установите вызываемый объект, который используется для создания LogRecord .

Параметры

factory - Заводской вызов, который будет использоваться для создания экземпляра записи журнала.

Новое в версии 3.2: Эта функция была предоставлена ​​вместе с getLogRecordFactory () для позволяют разработчикам больше контролировать, как LogRecord представляет создается событие регистрации.

Завод имеет подпись:

factory (имя, уровень, fn, lno, msg, args, exc_info, func = None, sinfo = None, ** kwargs)

название

Имя регистратора.

уровень

Уровень ведения журнала (числовой).

fn

Полный путь к файлу, в котором был выполнен вызов журнала.

лно

Номер строки в файле, где был выполнен вызов журнала.

сообщение

Сообщение журнала.

аргументы

Аргументы сообщения журнала.

exc_info

Исключительный кортеж или Нет .

функция

Имя функции или метода, вызвавшего ведение журнала. вызов.

синфо

Отслеживание стека, например, предоставляемое traceback.print_stack () , показывающий иерархию вызовов.

варгс

Дополнительные аргументы ключевого слова.

Атрибуты уровня модуля

лесозаготовка. lastResort

Через этот атрибут доступен «обработчик последней инстанции». Этот это StreamHandler , записывающий в sys.stderr с уровнем WARNING , и используется для обработки событий регистрации в отсутствие каких-либо конфигурация журналирования.Конечный результат - просто распечатать сообщение на sys.stderr . Это заменяет предыдущее сообщение об ошибке, в котором говорилось, что «Для логгера XYZ обработчики не найдены». Если вам нужно раньше поведение по какой-то причине lastResort может быть установлено на None .

Интеграция с модулем предупреждений

Функцию captureWarnings () можно использовать для интеграции ведения журнала с модулем предупреждений .

лесозаготовка. captureWarnings ( capture )

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

Если захват равен Истина , предупреждения, выданные модулем warnings , будут быть перенаправленным в систему ведения журнала. В частности, предупреждение будет форматируется с использованием warnings.formatwarning () и результирующей строки зарегистрирован в регистраторе с именем 'py.warnings' с уровнем серьезности WARNING .

Если захват равен Ложь , перенаправление предупреждений в систему ведения журнала остановится, а предупреждения будут перенаправлены в исходные пункты назначения (то есть те, которые действовали до вызова captureWarnings (True) ).

См. Также

Модуль logging.config

API конфигурации для модуля регистрации.

Модуль logging.handlers

Полезные обработчики, включенные в модуль регистрации.

PEP 282 - Система регистрации

Предложение, в котором описывается эта функция для включения в стандарт Python библиотека.

Исходный пакет журналов Python

Это исходный источник для пакета журналов . Версия пакет, доступный на этом сайте, подходит для использования с Python 1.5.2, 2.1.x и 2.2.x, которые не включают пакет logging в стандартный библиотека.

Челси Хэндлер | Биография, телешоу, книги и факты

Chelsea Handler , полностью Chelsea Joy Handler , (родилась 25 февраля 1975 года, Ливингстон, Нью-Джерси, США), американский комик и писатель, известный своим грубоватым и непристойным стилем. и ее ночное ток-шоу, Chelsea Lately (2007–14).

Британника исследует

100 женщин-первопроходцев

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

Хэндлер вырос в Нью-Джерси, он был самым младшим из шести братьев и сестер. В подростковом возрасте она участвовала в конкурсе «Мисс Нью-Джерси», но не продолжала выступать до тех пор, пока ей не исполнилось 19, когда она отправилась в Лос-Анджелес в надежде начать актерскую карьеру. В конце концов, она переключила свое внимание на комедию и начала выступать в клубах по всему городу.Это привело к ограничению участия в Girls Behaving Badly , шоу со скрытой камерой в сети Oxygen, премьера которого состоялась в 2002 году. Хэндлер привлекла поклонников своим дерзким, самоуничижительным стилем и подходом к теме секса с непочтительностью, граничащей с грубостью. . В 2005 году она опубликовала свою первую книгу, My Horizontal Life: A Collection of One-Night Stands , серию комедийных коротких эссе, посвященных ее жизни на свиданиях.

После появления на E! network и The Tonight Show with Jay Leno , Handler дали свою собственную программу на E !, The Chelsea Handler Show .Чередование комедийных скетчей с фрагментами выступлений Хэндлера в прямом эфире, шоу длилось 12 эпизодов в период с апреля по сентябрь 2006 года. В следующем году на E! Состоялась премьера Chelsea. В шоу были представлены выступления Хэндлера и регулярный круглый стол с участием других комиков. Среди ночных программ он был уникален тем, что специально привлекал в качестве гостей низкопробных знаменитостей, а также привлекал имена из топ-листа. После того, как в последнее время , ситком, основанный на закулисных событиях ток-шоу, дебютировал на E! в 2011.

В 2007 году Хэндлер также начал появляться вместе с Дженни Маккарти и Лией Ремини в онлайн-комедийном сериале В материнстве (2007–08; позже адаптирован в недолговечный телесериал [2009] с разными исполнителями). Хэндлер гость снялся в многочисленных телешоу, в том числе The Practice , Reno 911! и «Шоу Берни Мака» , и она появлялась как она сама в таких программах, как «Хорошая жена ». В 2010 году она провела церемонию вручения награды MTV Video Music Awards, следуя по стопам таких комиков, как Крис Рок, Джек Блэк и Деннис Миллер.В 2014 году Хэндлер объявила, что Chelsea Lately закончатся в этом году и что она разрабатывает контент для Netflix. Этот проект превратился в четырехсерийный документальный комедийный сериал Chelsea Does (2016). В каждом эпизоде ​​Хэндлер импровизировал и проводил интервью на спорную тему. Позже, в 2016 году, она также представила на Netflix премьеру свободного ток-шоу Chelsea ; программа закончилась в следующем году.

Chelsea Handler

Chelsea Handler, 2008.

PRNewsFoto / Spotlight 29 Casino / AP Images Получите подписку Britannica Premium и получите доступ к эксклюзивному контенту. Подпишитесь сейчас

Вторая книга Хэндлера, Are You There, Vodka? Это я, Челси, (2008) дебютировал на вершине списка бестселлеров документальной литературы New York Times . За ним последовали Chelsea Chelsea Bang Bang (2010) и Lies That Chelsea Handler Told Me (2011), сборник анекдотов, написанных ее друзьями и семьей; обе книги также стали хитом номер один.Хэндлер рассказала о своих неудачных поездках в книге Uganda Be Kidding Me (2014), которая также сразу стала бестселлером. Ты здесь, Челси? , ситком на NBC, основанный на книгах Хэндлера, вышел в эфир в 2012 году. Хэндлер был исполнительным продюсером шоу и играл второстепенную роль. Ее более поздние работы включали Жизнь будет смертью меня:… и ты тоже! (2019), в котором описывается ее «год самопознания», и Hello, Privilege. Это я, Челси (2019), документальный фильм, исследующий влияние привилегий белых на культуру.

В дополнение к своей телевизионной карьере, Хэндлер продолжала выступать в качестве стендап-комика. Фильм о ее стендап-шоу Uganda Be Kidding Me Live (2014) распространялся через Netflix. Она также играла небольшие роли в фильмах, в том числе грубую лучшую подругу персонажа Риз Уизерспун в комедийном боевике This Means War (2012).

Использование обработчика Apache - HTTP-сервер Apache версии 2.4

В этом документе описывается использование обработчиков Apache.

См. Также

"Обработчик" - это внутреннее представление Apache действие, выполняемое при вызове файла. Обычно файлы имеют неявные обработчики в зависимости от типа файла. Обычно все файлы просто обслуживаются сервером, но некоторые типы файлов «обрабатываются» отдельно.

Обработчики также могут быть настроены явно, на основе расширений файлов или местоположения, независимо от типа файла. Это выгодно как потому, что это более элегантное решение, так и поскольку он также позволяет использовать как тип , так и обработчик, который будет связан с файлом.(См. Также Файлы с несколькими Расширения.)

Обработчики

могут быть встроены в сервер или включены в модуль, или они могут быть добавлены с помощью директивы Action . В встроенные обработчики в стандартном дистрибутиве как следует:

  • обработчик по умолчанию : отправьте файл с помощью default_handler () , который является обработчиком, используемым по умолчанию для обработки статического содержимого. (ядро)
  • отправить как есть : отправить файл с заголовками HTTP как есть.( мод_азис )
  • cgi-script : обрабатывать файл как CGI сценарий. ( mod_cgi )
  • imap-файл : синтаксический анализ как правило карты изображений файл. ( mod_imagemap )
  • server-info : Получить сервер информация о конфигурации. ( mod_info )
  • server-status : получить статус сервера отчет. ( mod_status )
  • type-map : Анализировать как файл сопоставления типов для согласование содержания.( mod_negotiation )

Изменение статического содержимого с помощью сценария CGI

Следующие директивы вызовут запросы файлов с расширение html для запуска footer.pl CGI скрипт.

 Дополнение к действию /cgi-bin/footer.pl
Дополнительный колонтитул AddHandler .html 

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

Файлы с заголовками HTTP

Следующие директивы включат send-as-is обработчик, который используется для файлов, которые содержат свои собственные заголовки HTTP. Все файлы в Каталог / web / htdocs / asis / будет обрабатываться обработчик send-as-is , независимо от их расширения файлов.

 <Каталог "/ web / htdocs / asis">
    SetHandler отправить как есть
 

Для реализации функций обработчика добавлено был внесен в API Apache, который вы можете захотеть использовать.В частности, новый рекорд добавлен в структуру request_rec :

 char * обработчик 

Если вы хотите, чтобы ваш модуль задействовал обработчик, вам нужно только для установки r-> handler на имя обработчик в любое время до invoke_handler этап запроса. Обработчики реализованы как были раньше, хотя и использовало имя обработчика вместо содержимого тип. Хотя в этом нет необходимости, соглашение об именах для обработчики должны использовать слово, разделенное тире, без косой черты, поэтому чтобы не вторгаться в пространство имен медиа-типа.

The Handler - бессерверные архитектуры с AWS Lambda

Когда вызывается лямбда-функция, выполнение кода начинается с того, что называется обработчиком . В обработчик - это конкретный метод кода (Java, C #) или функция (Узел.js, Python), который вы создали и включили в свой упаковка. Вы указываете обработчик при создании лямбда функция. Каждый язык, поддерживаемый Lambda, имеет свой собственный требования к определению обработчика функции и упоминается в пакете.

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

Язык Пример определения обработчика
Ява
  MyOutput output handlerName (событие MyEvent, контекст контекста) {
...
}  
Node.js
  экспорт.handlerName = function (событие, контекст, обратный вызов) {
...
// параметр обратного вызова не обязателен
}  
Python
  def handler_name (событие, контекст):
...
вернуть some_value  
C #
  myOutput HandlerName (событие MyEvent, контекст ILambdaContext) {
...
}  

После успешного вызова обработчика внутри вашей лямбды функция, среда выполнения принадлежит коду, который вы написано. Ваша лямбда-функция может выполнять любую логику, которую вы считают нужным, руководствуясь написанным вами кодом, который начинается с обработчик.Это означает, что ваш обработчик может вызывать другие методы и функции в загруженных вами файлах и классах. Ваш код может импортировать сторонние библиотеки, которые вы загрузили, и установить и запустить загруженные вами исходные двоичные файлы (как пока они могут работать в Amazon Linux). Он также может взаимодействовать с другие сервисы AWS или делать запросы API к веб-сервисам, которые он зависит от и т. д.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *