Уровень для андроид. Обзор полезных приложений при строительстве
Уровень для андроид – одно из первых приложений, которое стало доступным для всех пользователей Google Play Market касательно строительной тематики. Теперь их намного больше. В обзоре представлены наиболее популярные приложения, которые размещены от наивысшей оценки до наименьшей.
В современном обществе тот человек, который имеет в своем пользовании смартфон, может практически все. Отслеживать местоположение своего ребенка, знать погоду, искать нужную дорогу, писать музыку… Нужными приложениями пользуются практически все ветки общества – от детей до стариков, учеников до профессионалов. Для ОС Android также разработаны различные профессиональные инструменты. К примеру, строители теперь могут не брать с собой уровни, линейки, транспортиры. А взять просто смартфон или планшет.
Строительный уровень (Скачать)
Наиболее ценный инструмент среди пользователей гаджетов на андроид. Приложение имеет функции измерения углов, наклона поверхности, измерение длины, отвес. Очень прост в использовании, отличается хорошей точностью. Благодаря этому и получил много положительных отзывов среди пользователей приложения. Графика хоть и примитивная, зато нет ничего лишнего. Здесь особых изысков и не требуется.
Установить приложение можно абсолютно бесплатно. При этом платной версии нет, реклама всплывает редко в верхней части экрана. Если выключить соединение с сетью интернет, то ничего не будет отвлекать от измерений. Оценивают пользователи в 4.7 звезд из возможных 5.
Фото: Строительный уровень на андроидBubble level (Скачать)
Еще одно приложение, которое способно измерить уровень поверхности – пузырьковый нивелир. Если в предыдущем случае измеряется точный угол, то здесь будет удобно работать тем, кто привык к классическому уровню с пузырьками и ограничителями. Помимо них, есть измерения градуса отклонения от оси Х и У. Графика реалистичная. Порой кажется, будто в руках настоящий строительный уровень. Очень прост в использовании.
Устанавливается приложение бесплатно, платной версии нет, но есть небольшое количество рекламы. Оценка высокая – 4.7 из 5 звезд.
Фото: Bubble levelПРОраб Free (Скачать)
Полезное приложение для расчета количества необходимых материалов для строительства или ремонта. Здесь можно рассчитать площадь, количество материалов для штукатурки, шпаклевки, также можно узнать о количестве кирпича, обоев и прочих строительных материалов. В нем можно даже выбрать производителя материалов. В итоге — рассчитать сумму, необходимую для покупки всех строительных материалов, можно именно с помощью этого приложения. Теперь составить смету на строительство или ремонт не составит никакого труда. Даже без привлечения специалистов.
Простой и понятный интерфейс без лишних графических эффектов, малое количество рекламы и отсутствие платного контента понравится многим профессиональным строителям и желающим сделать ремонт своими руками. Оценивают приложение в 4.6 из 5 звезд.
Фото: ПРОраб FreeРасчет площадей помещения (Скачать)
Как рассчитать строительные материалы, если не знаешь общей площади помещения? Необходимо его измерить, если оно имеет правильную форму. А если нет, то на помощь приходит приложение, которое рассчитает площадь разнообразной формы. Базовые формы помещений заложены в шаблонах. Для точного измерения необходимо ввести данные и получить результат. Приложение способно не только измерить площадь, но и объем помещения. Простой интерфейс, который будет понятен абсолютно всем. Нет лишних графических эффектов, классическое оформление в бело-черных цветах. Поможет тем, кто решился на ремонт жилья и не прибегает к помощи специалистов.
Реклама присутствует, но в небольших количествах. Платной версии нет, устанавливается бесплатно. Имеет массу положительных отзывов и 4.6 звезд из 5.
Фото: Расчет площадей помещения на андроидСтроительный калькулятор (Скачать)
Очередной инструмент, который поможет рассчитать количество бетона для фундамента и даже краски для окрашиваемой поверхности. При вводе данных получается итоговый результат и примерная стоимость. Все понятно в приложении, нет никаких трудностей по расчету. Широкие возможности позволяют пользоваться приложением профессионалам и любителям. Оформление без излишеств. Также поможет составить смету для будущего строительства или ремонта под ключ. Очень пригодится для перепроверки подрядчика.
Рекламы практически нет, приложение бесплатное без предложения покупки платной версии. Оценка высокая – 4.6 из 5.
Фото: Строительный калькулятор на андроидЛазерный уровень (Скачать)
После запуска приложения рекомендуется провести калибровку для более точных расчетов. Можно сделать захват изображения и измерить азимут. Этот уровень поможет при измерении рельефа местности. Например, под будущую постройку или установку ограждения. Точность измерения без погрешностей.
Рекламы практически нет, платной версии нет. Интерфейс в принципе простой, разобраться в приложении не сложно. Оценка – 4.5 из 5.
Фото: Лазерный уровень на андроидНабор инструментов (Скачать)
В этом наборе можно встретить транспортир, уровень и линейку. Все измерения точные и пользоваться приложением довольно просто. Реалистичная графика, передающая эффект пользования настоящими инструментами. Подходит для пользователей разного уровня профессионализма. Очень полезное приложение, которое не занимает на вашем устройстве много памяти. Версия англоязычная, но при этом все понятно и легко в использовании.
Хоть и указано, что есть платный контент, но в чем он заключается – не понятно. В настройках и меню не предлагается что-либо приобрести. Реклама присутствует только при запуске приложения, во время работы не беспокоит. Оценка 4.4 из 5.
Фото: Набор инструментов на андроидОтвес (Скачать)
Полезный инструмент для проверки горизонтального и вертикального выравнивая. Используется камера устройства. Есть возможность измерить угол и длину объекта. Для того, чтобы полноценно пользоваться приложением, необходимо пройти этапы обучения (даются в начале, при запуске). Есть калибровка устройства для корректной работы.
Реклама надоедает постоянно, появляется даже в самый неподходящий момент. Проще отключить интернет, чтобы этого не происходило. Оценка – 4.1 из 5 возможных звезд.
Есть как положительные, так и отрицательные отзывы.
Фото: Отвес на андроидУмные инструменты (Скачать)
Хорошая подборка необходимых инструментов. Здесь можно найти и компас, и лупу, и зеркало, и радар для измерения скорости. А также множество нужных и не очень вкладок. Существует много проблем с калибровками для каждого устройства. Многие данные не совпадают. При проверке стороны света, неверно показывает север в 6 из 10 случаев. Однозначно полезными только являются конвертер единиц, транспортир и секундомер.
Присутствует реклама, нет платного контента. Оценка 4.1 из 5 звезд. Хотя при получении ошибочных данных, она явно немного завышена.
Измеритель расстояния (Скачать)
Приложение призвано измерять расстояние от устройства до интересующего объекта, а так же для измерения высоты предмета. При пользовании приложением выявлена некоторая неточность в измерениях, на 100% ему доверять нельзя. Но для приблизительных расчетов — очень неплохой вариант. Пользоваться им несложно, достаточно знать основные английские слова, так как приложение англоязычное.
Реклама присутствует постоянно, нет платного контента. Оценка всего 3.7 из 5 баллов из-за множества недовольных пользователей.
Фото: Измеритель расстояния на андроидУважаемые читатели! Если у вас остались вопросы или есть комментарии по теме статьи — пожалуйста, оставляйте их ниже.
Попытка установить уровень журнала гидролокатора на INFO
Я пытаюсь установить уровень журнала гидролокатора на INFO.
Я попытался использовать sonar-project.properties
и установить sonar.log.level = INFO
, но он не работает.
Какая-нибудь помощь по этому поводу, пожалуйста?
sonar.log.level = INFO
sonarqube Поделиться
1 ответ
- Android-установить уровень журнала по умолчанию на DEBUG
Я работаю над Android 3.0. У меня есть служба, которая запускается на boot, и у меня есть некоторые отладочные журналы в ней. Проблема в том, что я не вижу журналов в LogCat, так как уровень журнала по умолчанию равен INFO после boot. Иногда после boot, когда я бегу от shell ‘getprop…
- Django: как установить уровень журнала на INFO или DEBUG
Я попытался изменить уровень отладки на DEBUG в Django, потому что хочу добавить некоторые отладочные сообщения в свой код. Кажется, это не имеет никакого эффекта. Моя конфигурация ведения журнала: LOGGING = { ‘version’: 1, ‘disable_existing_loggers’: False, ‘formatters’: { ‘simple’: { ‘format’:…
2
У меня была та же проблема, и оказалось, что я передаю флаг -X
команде sonnar-scanner
. Похоже, что этот флаг переопределяет настройку sonar.log.level
и всегда устанавливает ее на DEBUG
.
Вот документация команды sonar-scanner
: https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
Поделиться Elviss Strazdins
Похожие вопросы:
Уровень ведения журнала по умолчанию Sonar Runner
Можно ли изменить уровень ведения журнала по умолчанию для гидролокатора runner с INFO на WARN или аналогичный? Наш ночной анализ SonarQube взрывает журналы Team City с огромным количеством записей….
Установить уровень журнала log4j
В настоящее время я работаю над проектом, который использует log4j. Я запускаю testcase (junit) и хотел бы установить уровень журнала на trace, чтобы увидеть, все ли значения верны. Классы,…
как установить уровень ведения журнала на info Для MongoDb?
У меня есть приложение Rails, которое использует MongoDb на задней панели. У меня есть эти сообщения, которые говорят MONGODB [WARNING] Please note that logging negatively impacts client-side…
Android-установить уровень журнала по умолчанию на DEBUG
Я работаю над Android 3.0. У меня есть служба, которая запускается на boot, и у меня есть некоторые отладочные журналы в ней. Проблема в том, что я не вижу журналов в LogCat, так как уровень журнала…
Django: как установить уровень журнала на INFO или DEBUG
Я попытался изменить уровень отладки на DEBUG в Django, потому что хочу добавить некоторые отладочные сообщения в свой код. Кажется, это не имеет никакого эффекта. Моя конфигурация ведения журнала:…
Как установить уровень журнала в Winston/Node.js
Я использую Winston logging с моим приложением Node.js и определил транспорт файлов. Во всем своем коде я регистрируюсь, используя либо logger.error , либо logger.warn , либо logger.info . Мой…
Как установить общий уровень ведения журнала slf4j+Logback Jetty?
Я использую клиент Jetty http в своем приложении. Я также использую SLF4J с LogBack. Как установить общий уровень ведения журнала Jetty на INFO? Я следовал инструкциям в документации Jetty, чтобы…
Как установить уровень ведения журнала для HikariCP?
В настоящее время HikariCP регистрируется на уровне INFO , и я хочу установить его на SEVERE . Когда я пытаюсь установить уровень на родительском регистраторе (единственная ссылка на ведение…
Как установить уровень ведения журнала spark по умолчанию?
Я запускаю pyspark приложения с pycharm на своей собственной рабочей станции в кластер из 8 узлов. Этот кластер также имеет настройки, закодированные в spark-defaults.conf и spark-env.sh Вот как я…
Как установить уровень ведения журнала для конфигурации spring cloud
Я пытаюсь отладить некоторые проблемы, которые возникают у меня с моей конфигурацией spring cloud, но я не уверен, как правильно установить уровень ведения журнала для нее. Я попытался установить…
Настройка уровня доверия .NET в IIS—Руководства по установке (10.3 и 10.3.1)
В этом разделе
ArcGIS Web Adaptor может дополнительно быть настроен для передачи данных ArcGIS Server, используя высокий или средний уровни доверия Microsoft .NET в Internet Information Systems (IIS). Это применяется в организациях с высокой секретностью, которые ограничивают доступ к приложениям.
Вам требуется установить уровень доверия на Полный при первой настройке Web Adaptor для ArcGIS Server. После завершения настройки система подтвердила, что вы имеете доступ к серверу через URL Web Adaptor URL, на этом этапе вы можете изменить Web Adaptor, чтобы он передавал данные серверу через Высокий или Средний уровни доверия. Web Adaptor не поддерживает использование Низкого или Минимального уровней доверия. Уровень доверия можно настроить независимо от пула приложения Web Adaptor, установленного до версий 2.0 или 4.0 в IIS.
Об уровнях доверия Microsoft .NET в IIS
В Internet Information Systems (IIS) уровень доверия приложения определяет права доступа, которые наделяются ему через код доступа .NET политики безопасности (CAS). По умолчанию IIS настроен на Полный уровень доверия, что означает наделение полных прав доступа к приложениям. Однако в организациях с высокой секретностью приложениям устанавливается только частичное доверие. Частичное доверие может устанавливаться одним из четырёх уровней: Высоким, Средним, Низким и Минимальным.
Об использовании уровней доверия Microsoft .NET с Web Adaptor
При установке Web Adaptor уровень доверия, назначенный приложению, наследуется с веб-сайта IIS, на котором развертывается Web Adaptor. Поведение также идентично независимо от пула приложения Web Adaptor, установленного до версий 2.0 или 4.0 в IIS.
Если для веб-сайта назначен Полный уровень доверия, то с вашей стороны не требуется дополнительных действий. Вы можете настроить Web Adaptor с ArcGIS Server обычным способом. Если уровень доверия, назначенный Web Adaptor как Высокий или Средний, и вы входите на страницу настройки, то вы увидите следующее сообщение об ошибке:
Чтобы настроить ArcGIS Web Adaptor с ArcGIS Server, вам следует предварительно в IIS установить Полный уровень доверия .NET для приложения Web Adaptor. После настройки вы можете изменить уровень доверия приложения обратно к исходному значению и войти на сервер через Web Adaptor как обычно.
Низкий и Минимальный уровни не поддерживаются приложением ArcGIS Web Adaptor. Вы не сможете зайти на страницу настройки или передавать данные в ArcGIS Server. Так как передача данных с программным обеспечением ArcGIS не возможна при Низком или Минимальном уровнях, вы увидите сообщение об ошибке IIS.
Вам требуется установить уровень доверия на Полный при первой настройке Web Adaptor для ArcGIS Server. После настройки уровень доверия Web Adaptor можно изменить на Высокий или Средний. Использование Web Adaptor для передачи запросов поддерживается на Высоком или Среднем уровнях доверия. Выполните следующие шаги, чтобы изменить уровень доверия.
Изменения уровня доверия для Web Adaptor
- Откройте Internet Information Systems (IIS) Manager.
- На панели Подключения (Connections) раскройте Сайты (Sites).
- Раскройте веб-сайт, на котором развернут ваш Web Adaptor, и выберите приложение веб-адаптера.
- Кликните дважды .NET Trust levels.
- Из ниспадающего списка Уровень доверия (Trust level) выберите Полный (внутренний) (Full (internal)), Высокий (High) или Средний (Medium).
- Нажмите кнопку Применить (Apply).
Отзыв по этому разделу?
Яркость кнопки Xbox. Чтобы уменьшить яркость кнопки Xbox, можно установить уровень яркости 10 %. | Xbox button brightness — If you want to decrease brightness on the Xbox button, you can adjust it down to 10% of standard brightness. |
Были проведены многочисленные общественные опросы, чтобы попытаться установить уровень веры в эволюцию. | There have been numerous public surveys to try to ascertain levels of belief in evolution. |
Можно установить уровень изоляции как для отдельных транзакционных операций, так и для глобальных. | One can set the isolation level for individual transactional operations as well as globally. |
Возможно, пришло время задуматься об изменении климата на том же уровене значимости, на котором находится воздух для нас. | But perhaps it’s time we start thinking about climate change on the same visceral level that we experience the air. |
Все 50 штатов США установи — ли свои официальные законные праздники . | All the US 50 states established their official legal holidays. |
Установи контакт в Министерстве юстиции и ФБР и информируй Джоша в течении дня и ночи. | Establish a contact at the Justice Department and the FBI and keep Josh informed. |
Установи шпринг к переднему якорю, потом сразу брось его. | Rig a spring to the forward anchor, then drop her immediately. |
В главном окне установи курсор в поле для ввода текста. | In the main window, click in the typing box. |
Так, установи домкрат под джипом и постарайся поднять с помощью рычага, ясно? | Okay, you put the jack under the jeep and then put the handle in the base and ratchet it up and down, okay? |
Установи визуальный контакт, и действуй с предельной осторожностью. | Get a visual on this guy, and then proceed with extreme caution. |
Установи планку на уровне, доступном для всех и каждого, вплоть до самого ничтожного, самого глупого, — и убьёшь желание стараться у всех людей, маленьких и больших. | Set up standards of achievement open to all, to the least, to the most inept — and you stop the impetus to effort in all men, great or small. |
И, детка, установи приложение для отслеживания телефона. | And, babe, set up your phone tracker app, please. |
На уровене максимального сжатия нервов между пластинами позвонков. | The level of maximal neural compressions between the pedicles of the fractured vertebrae. |
Это самый низкий из возможных уровеней готовности. | That’s the lowest of four possible readiness grades. |
К сожалению, уровень самоубийств среди детей афроамериканцев за последние 20 лет удвоился. | Sadly, the suicide rate among black children has doubled in the past 20 years. |
Очистив необходимое количество рядов, игрок переходит на следующий игровой уровень. | By clearing the requisite number of rows, the player proceeds to the next game level. |
На начальном этапе, как и ожидалось, наблюдался высокий уровень опухолевой ДНК в крови. | So at the initial time point, as expected, there’s a high level of cancer DNA in the blood. |
И по своим наблюдениям, могу сказать, что те, кто вместе трапезничают чаще, показывают более высокий уровень коммунитас. | And from my observations, I can tell you, those that eat together more frequently, exhibit higher levels of communitas. |
Нам известно, что в результате сдвига плит изменились климат и уровень воды в океане и появилось много видов ландшафта, а также различные типы окружающей среды. | So as the plates move around, we know climate has changed, sea level has changed, we have a lot of different types of landscapes and different types of environments. |
И в то же самое время уровень иммиграции сейчас выше, чем когда-либо раньше. | And at the same time, immigration is higher than it’s ever been before. |
К примеру, если ориентировочный доход нации вырастает на 10% по сравнению с другими странами, тогда в среднем собственные доходы людей должны вырасти хотя бы на 5%, чтобы поддержать прежний уровень удовлетворённости. | Now, if the reference income of a nation, for example, goes up 10 percent by comparing themselves to the outside, then on average, people’s own incomes have to go up at least five percent to maintain the same level of satisfaction. |
Чем больше углекислого газа попадает в океан, тем ниже становится уровень pH, что сигнализирует об увеличении кислотности воды в океане. | As more carbon dioxide has entered the ocean, the seawater pH has gone down, which basically means there has been an increase in ocean acidity. |
Это был мой последний школьный год, оставалась пара месяцев до выпускных экзаменов и пара дней до «тренировочных» экзаменов, как их называют у нас в Кении, которые оценивают уровень подготовки к выпускным экзаменам. | Here I was in my final year of high school, just a few months from doing my end of high school exams and a few days from doing a set of exams we call here in Kenya mocks, which are somehow meant to gauge how prepared one is for the final exams. |
Вам всем знакомо чувство, когда нужно сделать слишком много дел или когда вы откладываете перерыв на обед, и уровень сахара в крови падает. | You all know this feeling, when you’ve got too much to do, or when you’ve put off breaking for lunch and your blood sugar takes a dive. |
Всё это повышает уровень шума в ранее тихом океане. | All of this is raising noise levels in a previously quiet ocean. |
Сейчас известно, что шум кораблей увеличивает уровень гормонов стресса у китов и может нарушить их питание. | And we now know that ship noise increases levels of stress hormones in whales and can disrupt feeding behavior. |
Не важно, какого вы пола, если в крови повышен уровень тестостерона, вы с большей вероятностью ошибочно воспримите безобидного человека как угрозу. | Where regardless of your sex, if you have elevated testosterone levels in your blood, you’re more likely to think a face with a neutral expression is instead looking threatening. |
Повышенный уровень тестостерона и гормонов стресса приводит к повышению активности миндалины и замедлению работы лобной доли. | Elevated testosterone levels, elevated levels of stress hormones, and your amygdala is going to be more active and your frontal cortex will be more sluggish. |
Например, если во время беременности ваша мать постоянно испытывала стресс, по законам эпегенетики, в зрелом возрасте ваша миндалина станет легковозбудимой, а уровень гормона стресса будет повышен. | And as an example of this, if as a fetus you were exposed to a lot of stress hormones through your mother, epigenetics is going to produce your amygdala in adulthood as a more excitable form, and you’re going to have elevated stress hormone levels. |
Аэробные упражнения снижают уровень бета-амилоида у экспериментальных животных. | Aerobic exercise has been shown in many studies to decrease amyloid beta in animal models of the disease. |
Так Вот, Способность К Сопереживанию У Наших Выпускников За Последние Два Десятка Лет Существенно Снизилась, А Уровень Нарциссизма Вырос. | And so, the markers of empathy in our college graduates have been dropping dramatically in the past two decades, while those of narcissism are on the rise. |
Уровень его образования уже, видимо, выбрал его дорогу. | Well, his education already chose for him, probably. |
Тот факт, что пациенты, как Робин, посещают эти клиники, эти диспансеры и получают такой уровень личного внимания, просвещения и сервиса, должен быть тревожным сигналом для системы здравоохранения. | The fact that patients like Robin are going to these clinics, are going to these dispensaries and getting that sort of personalized attention and education and service, really should be a wake-up call to the healthcare system. |
Буря проходит, уровень воды снижается, вы избавляетесь от мешков и делаете так каждый раз, когда приходит буря. | Storm goes away, the water level goes down, you get rid of the sandbags, and you do this storm after storm after storm. |
По сути, статья в журнале указала, что через 41 год после выпуска из Йеля, у чернокожих выпускников 1970 года уровень смертности был в три раза выше, чем у остальных однокурсников. | In fact, the magazine article indicated that 41 years after graduation from Yale, the black members of the Class of 1970 had a death rate that was three times higher than that of the average class member. |
Исследования выявили, что высокий уровень неравенства связан с высоким риском заболеваний широкого спектра: от высокого давления до ожирения, от рака груди до болезней сердца, и даже преждевременной смерти. | Research has found that higher levels of discrimination are associated with an elevated risk of a broad range of diseases from blood pressure to abdominal obesity to breast cancer to heart disease and even premature mortality. |
Исследование о чернокожих подростках выявило, что те, кто чаще подвергался дискриминации в подростковом возрасте, имеют высокий уровень гормонов стресса, высокого давления, ожирения уже в возрасте 20 лет. | For example, a study of black teens found that those who reported higher levels of discrimination as teenagers had higher levels of stress hormones, of blood pressure and of weight at age 20. |
Она заметила, что по мере роста уровня стресса… а мы можем объективно оценить уровень стресса. | And what happened was, that as the stress increased — and here we had objective measures of stress: How long were you without power? |
Мы давали крысам препараты, которые либо повышают уровень метилирования ДНК, либо понижают его, и наблюдали за эпигенетическими маркерами. | So we treated these animals with drugs that either increase DNA methylation, which was the epigenetic marker to look at, or decrease epigenetic markings. |
Но если мы понижали уровень метилирования генов, животные переставали быть зависимыми. | But if we reduce the DNA methylation, the animals are not addicted anymore. |
25 лет назад ВОЗ и ЮНИСЕФ установили критерии для больниц с условиями, благоприятными для грудного вскармливания, чтобы обеспечить оптимальный уровень поддержки связи матери и ребенка и кормления грудных детей. | Twenty-five years ago, the World Health Organization and UNICEF established criteria for hospitals to be considered baby friendly — that provide the optimal level of support for mother-infant bonding and infant feeding. |
Разница в том, что сегодня люди ставят под сомнение такую статистику: Уровень безработицы в США — 5%. | What’s different now is people are questioning statistics like, The US unemployment rate is five percent. |
В том, чтобы более широко посмотреть на данные, например, на уровень безработицы в 5%, и узнать, как эти данные меняются со временем или в зависимости от уровня образования — вот почему ваши родители хотели, чтобы вы поступили в колледж, — или как они меняются в зависимости от пола. | So it’s about zooming out from one data point, like the unemployment rate is five percent, and seeing how it changes over time, or seeing how it changes by educational status — this is why your parents always wanted you to go to college — or seeing how it varies by gender. |
В наши дни уровень безработицы среди мужчин выше, чем среди женщин. | Nowadays, male unemployment rate is higher than the female unemployment rate. |
Они быстро подняли уровень здоровья афганского народа, который на тот момент был худшим в мире. | They are rapidly improving the health status of the Afghan population, which used to be the worst in the world. |
Что, если бы наши растения могли измерять уровень токсичности почвы и выражать эту токсичность через цвет своих листьев? | What if our plants could sense the toxicity levels in the soil and express that toxicity through the color of its leaves? |
Это не низкий уровень представительства. | This is not underrepresentation. |
В результате долгого и сложного процесса племена объединились и сформировалась китайская нация, контролирующая Хуанхэ на всей её протяжённости и способная сплотить сотни тысяч людей для постройки плотин и каналов и таким образом усмирить реку, предотвратить разрушительные наводнения и засухи и обеспечить некий уровень процветания для каждого. | And then in a long and complicated process, the tribes coalesced together to form the Chinese nation, which controlled the entire Yellow River and had the ability to bring hundreds of thousands of people together to build dams and canals and regulate the river and prevent the worst floods and droughts and raise the level of prosperity for everybody. |
А при отсутствии некоего глобального сотрудничества у национализма не тот уровень, чтобы справиться с проблемами, будь то изменение климата или технологическое разобщение. | And if you don’t have some kind of global cooperation, nationalism is just not on the right level to tackle the problems, whether it’s climate change or whether it’s technological disruption. |
Похоже, вам по душе глобальное правление, но если взглянуть на карту мира глазами Transparency International, исследующей уровень коррупции политических институтов, то мы увидим бескрайнее море красного с вкраплениями жёлтого у тех, что на хорошем счету. | So you seem to be a fan of global governance, but when you look at the map of the world from Transparency International, which rates the level of corruption of political institutions, it’s a vast sea of red with little bits of yellow here and there for those with good institutions. |
Сейчас уровень доверия к СМИ упал до минимума. | Trust in the media has hit an all-time low. |
В отдельных частях страны, особенно на Дальнем юге, уровень смертности чернокожих матерей и младенцев почти такой же, как в странах к югу от Сахары. | In certain parts of the country, particularly the Deep South, the rates of mother and infant death for black women actually approximate those rates in Sub-Saharan African. |
Уровень смертности чернокожих малышей в возрасте до года в два раза выше, чем белых. | They’re also twice as likely for their infants to die before the first year of life than white infants. |
Это самый низкий уровень арифметики по окончании среднего образования. | Now, Level 1 numeracy skills — that’s low-end GCSE score. |
Мы сможем сократить уровень стресса и поляризации в городской среде. | We can reduce the stress and the polarization in our urban habitats. |
Уровень кислорода в то время был ниже половины нынешнего, около 10 %. | Oxygen levels at this time go to below half of what they are today, so about 10 percent. |
Повышается уровень кортизола, страдает лимбическая система, снижается продуктивность в работе. | The cortisol shoots up, the limbic system gets fired, we lose productivity at work. |
В 1999 году было проведено исследование образцов крови, подтвердившее, что у недавно влюбившихся примерно тот же уровень серотонина, что и у людей с обсессивно-компульсивным расстройством личности. | This study from 1999 used blood tests to confirm that the serotonin levels of the newly in love very closely resembled the serotonin levels of people who had been diagnosed with obsessive-compulsive disorder. |
Да, и низкий уровень серотонина так же является признаком сезонного аффективного расстройства и депрессии. | Yes, and low levels of serotonin are also associated with seasonal affective disorder and depression. |
Исследователи полагают, что низкий уровень серотонина связан с навязчивыми мыслями об объекте любви, будто кто-то поселился у вас в голове. | Researchers believe that the low levels of serotonin is correlated with obsessive thinking about the object of love, which is like this feeling that someone has set up camp in your brain. |
Установка уровня безопасности брандмауэра.
Установка уровня безопасности брандмауэра.
Автоматический брандмауэр может адаптировать Вашу защиту в зависимости от типа сети, к которой подключен Ваш ПК.
Все увеличивающееся число ноутбуков, а также большое количество опций, предназначенных для использования в разных сетевых средах, говорят о том, что защита брандмауэра должна уметь адаптироваться к различным видам сетей.
Например, Интернет-подключение к беспроводной сети в аэропорту требует гораздо более высокого уровня безопасности, чем подключение в домашней сети.
Несмотря на то, что по умолчанию брандмауэр применяет различные уровни безопасности в соответствии с типом сети, к которой подключается Ваш компьютер, Вы всегда можете изменить данную конфигурацию.
Для этого выполните следующие действия:
Нажмите Проверка в основном окне.
Щелкните Установки в разделе Защита безопасности.
¦Щелкните Брандмауэр.
В разделе Сети нажмите Установки.
Выберите нужную сеть, если их больше чем одна, и нажмите Настройка. Затем присвойте сети имя.
Примечание: Если Вы нажмете Подробнее, то сможете просмотреть название сетевой карты, используемой для подключения, IP-адрес, шлюз, DNS-сервер и др.
Укажите надежная это сеть или общественная.
Надежная сеть: Надежная сеть — это локальная сеть (например, домашняя), в которой Вы можете спокойно пользоваться папками или принтерами, общими с другими сетевыми компьютерами. Если Вы выбираете данную опцию, когда Ваш ПК подключается к локальной сети, брандмауэр применяет уровень безопасности, позволяющий Вам пользоваться совместными с другими компьютерами ресурсами.
Общественная сеть: Общественные сети — это сети, к которым может подключаться Ваш ПК в общественных местах, например, в аэропортах, университетах, Интернет-кафе и др. В таких случаях брандмауэр применяет более строгий уровень безопасности для предотвращения несанкционированного доступа других компьютеров к Вашему ПК.
Нажмите OK.
Установка уровня олицетворения — Win32 apps
- Чтение занимает 2 мин
В этой статье
При задании уровня олицетворения для приложения определяется, какой уровень полномочий приложение предоставляет другим приложениям для использования его удостоверения при его вызове. Это значение можно задать только для серверных приложений COM+ — приложения библиотеки выполняются под удостоверением ведущего процесса и используют уровень олицетворения, который он указывает. Дополнительные сведения см. в разделе уровни олицетворения.
Выбор уровня олицетворения
Щелкните правой кнопкой мыши приложение COM+, для которого задается олицетворение, и выберите пункт Свойства.
В диалоговом окне Свойства приложения перейдите на вкладку Безопасность .
В поле уровень олицетворения выберите соответствующий уровень. Ниже приведены уровни, упорядоченные от предоставления минимума более глубокому центру:
- Анонимно. Клиент анонимен по отношению к серверу. Сервер может олицетворять клиента, но маркер олицетворения (локальные учетные данные) не содержит никаких сведений о клиенте.
- Выявление. Сервер может получить удостоверение клиента и выполнить олицетворение клиента для проверки списка ACL.
- Олицетворять. Сервер может олицетворять клиента, действуя от его имени, хотя и с ограничениями. Сервер может обращаться к ресурсам на том же компьютере, что и клиент. Если сервер находится на том же компьютере, что и клиент, он может получить доступ к сетевым ресурсам в качестве клиента. Если сервер находится на компьютере, отличном от клиента, он может получить доступ только к тем ресурсам, которые находятся на том же компьютере, что и сервер. Это значение по умолчанию для серверных приложений COM+.
- Делегат. Сервер может олицетворять клиента, действуя от его имени, будь то на том же компьютере, что и клиент. Во время олицетворения учетные данные клиента (как с локальными, так и с учетом допустимой сети) могут быть переданы на любое количество компьютеров.
Нажмите OK.
Настройка безопасности Role-Based
Настройка политики ограниченного использования программ
Включение проверки подлинности для библиотечного приложения
Установка уровня проверки подлинности для серверного приложения
Как установить уровень зоны Интернета по умолчанию с помощью групповой политики?
donL,
Так что мне было любопытно узнать об этом. У меня нет серверной среды 2003 для тестирования, так что это было до «Google Fu», чтобы проверить это.
Оказывается, это «ошибка» в графическом интерфейсе. Политика, которую вы применили, работала правильно, она просто не отображается правильно в GUI IE на клиенте. Глупо, да … но это правда.
Вот пример принятого ответа на EE, который отражает это:
Если вы видите «Некоторые настройки управляются вашим системным администратором», значит, они были успешно применены и находятся на среднем уровне. Вы можете проверить это, щелкнув пользовательский уровень и посмотрев на каждую опцию безопасности, они будут совпадать с тем, что они должны быть для «среднего».
Вы можете не обращать внимания на то, что написано в разделе «Уровень безопасности для этой зоны» … это не совсем верно.
Например, если вы установите низкое значение, оно все равно будет означать средний / высокий или высокий, но если вы нажмете на пользовательский уровень, вы увидите, что «загрузка неподписанных элементов управления ActiveX» включена ….., которая является включенной опцией на низких и отключен на высоких. — Jake77444 @ EE
И этот блог также подтверждает это:
Шаблоны зон IE GPO и «Открыть файл — предупреждение безопасности»
В заключении
- Шаблоны безопасности не отображаются визуально на странице безопасности Internet Explorer, даже если они применяются.
- Параметры зоны безопасности применяются к Internet Explorer путем выполнения gpupdate, но требуется выход из системы, чтобы применить эти параметры к остальной части ОС.
- Параметр «Запуск приложений и небезопасные файлы» определяет, будет ли отображаться диалоговое окно «Открыть файл — предупреждение системы безопасности» при запуске приложений из определенного местоположения.
- «Запуск приложений и небезопасных файлов» нельзя установить с индивидуальной настройкой объекта групповой политики. (Вы можете создать собственный файл adm)
- При настройке безопасности зоны с помощью объекта групповой политики я рекомендую сделать страницу безопасности Internet Explorer невидимой для пользователей, чтобы избежать путаницы, поскольку они все еще могут довольно легко настроить ползунок уровня безопасности, это просто не будет иметь никакого эффекта!
Надеюсь, это поможет! Это была новость для меня!
Ведение журнала— средство ведения журнала для Python — документация Python 3.9.7
Исходный код: 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 ()
вернет / ожидает передачи целых чисел.
-
isEnabled для
( уровень ) Указывает, будет ли обработано этим регистратором сообщение с уровнем серьезности . Этот метод сначала проверяет уровень модуля, установленный
logging.disable (level)
, а затем эффективный уровень регистратора, как определено поgetEffectiveLevel ()
.
-
getEffectiveLevel
() Указывает эффективный уровень для этого регистратора. Если значение, отличное от
NOTSET
был установлен с помощьюsetLevel ()
, он возвращается. Иначе, иерархия перемещается к корню до тех пор, пока не будет установлено значение, отличное отNOTSET
найдено, и это значение возвращается. Возвращенное значение целое число, обычно одно из протоколов.EBUG
, протоколирование.INFO
пр.
-
getChild
(суффикс ) Возвращает регистратор, который является потомком этого регистратора, как определено суффиксом.Таким образом,
logging.getLogger ('abc'). GetChild ('def.ghi')
вернет то же самое logger, как будет возвращеноlogging.getLogger ('abc.def.ghi')
. Это удобный метод, полезный, когда родительский регистратор назван с использованием, например,__name__
а не буквальную строку.
- Отладка
Записывает сообщение с уровнем
DEBUG
в этот регистратор. 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)
напечатает что-то вроде
2006-02-08 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 .
-
info
( msg , * args , ** kwargs ) Записывает сообщение с уровнем
ИНФОРМАЦИЯ
в этот регистратор. Аргументы интерпретируется какdebug ()
.
-
предупреждение
( msg , * args , ** kwargs ) Регистрирует сообщение с уровнем
ПРЕДУПРЕЖДЕНИЕ
на этом регистраторе. Аргументы интерпретируется какdebug ()
.Примечание
Существует устаревший метод
warn
, который функционально идентично предупреждению
-
ошибка
( msg , * args , ** kwargs ) Записывает в журнал сообщение с уровнем
ОШИБКА
. Аргументы интерпретируется какdebug ()
.
-
критический
( сообщение , * args , ** kwargs ) Записывает в этот регистратор сообщение с уровнем
КРИТИЧЕСКИЙ
. Аргументы интерпретируется какdebug ()
.
-
журнал
( уровень , сообщение , * args , ** kwargs ) Записывает в этот регистратор сообщение с целочисленным уровнем и уровнем . Другие аргументы интерпретируется как
debug ()
.
-
исключение
( сообщение , * args , ** kwargs ) Записывает в журнал сообщение с уровнем
ОШИБКА
.Аргументы интерпретируется какdebug ()
. Информация об исключении добавляется в журнал сообщение. Этот метод следует вызывать только из обработчика исключений.
-
addFilter
( фильтр ) Добавляет указанный фильтр filter к этому регистратору.
-
removeFilter
( фильтр ) Удаляет указанный фильтр filter из этого регистратора.
-
фильтр
( запись ) Примените фильтры этого регистратора к записи и верните
True
, если запись подлежит обработке. Фильтры проверяются по очереди, пока один из они возвращают ложное значение. Если ни один из них не возвращает ложное значение, запись будут обработаны (переданы обработчикам). Если возвращается ложное значение, нет происходит дальнейшая обработка записи.
-
addHandler
( hdlr ) Добавляет указанный обработчик hdlr к этому регистратору.
-
removeHandler
( hdlr ) Удаляет указанный обработчик hdlr из этого регистратора.
-
findCaller
( stack_info = False , stacklevel = 1 ) Находит исходное имя файла вызывающего абонента и номер строки. Возвращает имя файла, строку номер, имя функции и информация о стеке в виде четырехэлементного кортежа. Стек информация возвращается как
Нет
, если stack_info не равноИстина
.Параметр stacklevel передается из кода, вызывающего
debug ()
и другие API. Если больше 1, избыток используется для пропуска кадров стека. перед определением возвращаемых значений. Обычно это будет полезно при вызове API журналирования из кода помощника / оболочки, чтобы информация в журнале событий относится не к коду помощника / оболочки, а к коду, который называет это.
-
ручка
( запись ) Обрабатывает запись, передавая ее всем обработчикам, связанным с этим регистратором и его предки (пока не будет найдено ложное значение , передайте ).Этот метод используется для неотобранных записей, полученных из сокета, а также для записей, созданных локально. Фильтрация на уровне регистратора применяется с использованием
filter ()
.
-
makeRecord
( name , level , fn , lno , msg , args , exc_info , func = None , extra = None , sinfo = None ) Это фабричный метод, который можно переопределить в подклассах для создания специализированных экземпляров
LogRecord
.
-
hasHandlers
() Проверяет, настроены ли для этого регистратора какие-либо обработчики. Это делается ищет обработчики в этом регистраторе и его родителях в иерархии регистратора. Возвращает
True
, если обработчик был найден, иначеFalse
. Метод прекращает поиск вверх по иерархии всякий раз, когда регистратор с атрибутом «распространять» установлен на false — это будет последний регистратор, который проверяется на наличие обработчиков.
Изменено в версии 3.7: Лесорубы теперь можно мариновать и не мариновать.
-
Уровни регистрации
Числовые значения уровней ведения журнала приведены в следующей таблице. Эти в первую очередь представляет интерес, если вы хотите определить свои собственные уровни и нуждаетесь в них имеют определенные значения относительно предопределенных уровней. Если вы определите уровень с тем же числовым значением он перезаписывает предопределенное значение; предопределенный имя потеряно.
Уровень | Числовое значение |
---|---|
| 50 |
| 40 |
| 30 |
| 20 |
| 10 |
| 0 |
Объекты-обработчики
Обработчики имеют следующие атрибуты и методы.Обратите внимание, что Handler
никогда не создается напрямую; этот класс действует как база для более полезных
подклассы. Однако метод __init __ ()
в подклассах должен вызывать Обработчик .__ init __ ()
.
- класс
лесозаготовка.
Погрузчик
-
__init__
(уровень = NOTSET ) Инициализирует экземпляр
Handler
, задав его уровень, задав список фильтров в пустой список и создание блокировки (с помощьюcreateLock ()
) для сериализованный доступ к механизму ввода-вывода.
-
createLock
() Инициализирует блокировку потока, которая может использоваться для сериализации доступа к базовому Функциональность ввода-вывода, которая может быть небезопасной для потоков.
-
приобрести
() Получает блокировку потока, созданную с помощью
createLock ()
.
-
выпуск
() Освобождает блокировку резьбы, полученную с помощью
accept ()
.
- Набор
Уровень
( уровень ) Устанавливает порог для этого обработчика на уровень . Регистрация сообщений, которые менее серьезные, чем уровень , будут проигнорированы. При создании обработчика уровень установлен на
NOTSET
(что приводит к тому, что все сообщения обработанный).Список уровней см. В разделе «Уровни ведения журнала».
Изменено в версии 3.2: параметр level теперь принимает строковое представление уровень, такой как «INFO» в качестве альтернативы целочисленным константам например
ИНФОРМАЦИЯ
.
-
setFormatter
( fmt ) Устанавливает
Formatter
для этого обработчика на fmt .
-
addFilter
( фильтр ) Добавляет указанный фильтр filter к этому обработчику.
-
removeFilter
( фильтр ) Удаляет указанный фильтр filter из этого обработчика.
-
фильтр
( запись ) Примените фильтры этого обработчика к записи и верните
True
, если запись подлежит обработке. Фильтры проверяются по очереди, пока один из они возвращают ложное значение. Если ни один из них не возвращает ложное значение, запись будет выпущен. Если возвращается ложное значение, обработчик не будет выдавать записывать.
-
заподлицо
() Убедитесь, что все данные журнала сброшены.Эта версия ничего не делает и предназначен для реализации подклассами.
-
закрыть
() Уберите все ресурсы, используемые обработчиком. Эта версия не выводит данные, но удаляет обработчик из внутреннего списка обработчиков, который закрывается, когда
shutdown ()
вызывается. Подклассы должны гарантировать, что это будет вызвано из переопределенных методовclose ()
.
-
ручка
( запись ) Условно генерирует указанную запись журнала, в зависимости от фильтров, которые могут были добавлены в обработчик.Оборачивает фактическую эмиссию записи в получение / снятие блокировки потока ввода / вывода.
-
handle Error
( запись ) Этот метод должен вызываться из обработчиков при обнаружении исключения во время вызова
emit ()
. Если атрибут уровня модуляraiseExceptions
—Ложь
, исключения игнорируются. Это то, что в основном требуется для системы ведения журнала — большинство пользователей не заботятся о ошибки в системе логирования, их больше интересует приложение ошибки.Однако вы можете заменить это специальным обработчиком, если хотите. Указанная запись — это та, которая обрабатывалась, когда исключение произошел. (Значение по умолчанию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 — это указано'% (сообщение) s'
. Если не указан datefmt , формат используется, что описано в документацииformatTime ()
.Параметр стиля может быть одним из «%», «{» или «$» и определяет, как строка формата будет объединена с ее данными: с использованием одного из% -форматирования,
ул.format ()
илистрока. Шаблон
. Это относится только к строка формата fmt (например,'% (message) s'
или{message}
), а не фактические сообщения журнала передаются вLogger.debug
и т. д .; видеть Использование определенных стилей форматирования в вашем приложении для получения дополнительной информации об использовании {- и $ -formatting для сообщений журнала.Изменено в версии 3.2: добавлен параметр style .
Изменено в версии 3.8: добавлен параметр validate .Неправильный или несоответствующий стиль и формат вызовет
ValueError
. Например:logging.Formatter ('% (asctime) s -% (message) s',)
.-
формат
( запись ) Словарь атрибутов записи используется как операнд для строки операция форматирования. Возвращает результирующую строку. Перед форматированием словаря, проводится пара подготовительных шагов. Сообщение Атрибут записи вычисляется с использованием msg % args .Если строка форматирования содержит
'(asctime)'
,вызывается formatTime ()
для форматирования времени события. Если есть информация об исключении, это форматируется с использованиемformatException ()
и добавляется к сообщению. Примечание что отформатированная информация об исключении кэшируется в атрибуте exc_text . Это полезно, потому что информация об исключении может быть замариновать и отправить по проволоке, но будьте осторожны, если у вас более одного подклассаFormatter
, который настраивает форматирование информации об исключении.В этом случае вам нужно будет очистить кешированный значение после того, как форматтер выполнил свое форматирование, так что следующий средство форматирования для обработки события не использует кешированное значение, а пересчитывает его заново.Если доступна информация о стеке, она добавляется после исключения. информации, используя
formatStack ()
для ее преобразования при необходимости.
-
formatTime
( запись , datefmt = None ) Этот метод должен вызываться из
format ()
с помощью средства форматирования, которое хочет использовать форматированное время.Этот метод можно переопределить в средства форматирования, чтобы обеспечить выполнение любых конкретных требований, но основное поведение выглядит следующим образом: если указан datefmt (строка), он используется сtime.strftime ()
для форматирования времени создания записывать. В противном случае используется формат «% Y-% m-% d% H:% M:% S, uuu», где uuu — это значение в миллисекундах, а остальные буквы соответствуютtime.strftime ()
документация. Пример времени в этом формате:23.01.2003 00: 29: 50, 411
.Возвращается результирующая строка.Эта функция использует настраиваемую пользователем функцию для преобразования создания время до кортежа. По умолчанию используется
time.localtime ()
; изменить это для конкретного экземпляра средства форматирования, установите атрибутпреобразователя
в функцию с той же сигнатурой, что иtime.localtime ()
иливремя. 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
: вы можете передать любой экземпляр
который имеет метод filter
с той же семантикой.
Изменено в версии 3.2: вам не нужно создавать специализированные классы Filter
или использовать другие
классы с фильтром
метод: вы можете использовать функцию (или другой
вызываемый) как фильтр.Логика фильтрации проверит,
объект имеет атрибут filter
: если он есть, предполагается, что это Вызывается фильтр
и его метод filter ()
. В противном случае это
считается вызываемым и вызывается с записью как сингл
параметр. Возвращаемое значение должно соответствовать возвращаемому фильтр ()
.
Хотя фильтры используются в основном для фильтрации записей на основе
более сложных критериев, чем уровни, они могут видеть каждую запись, которая
обрабатываются обработчиком или регистратором, к которому они прикреплены: это может быть полезно, если
вы хотите делать такие вещи, как подсчет количества записей, обработанных
конкретный регистратор или обработчик, или добавление, изменение или удаление атрибутов в LogRecord
обрабатывается.Очевидно изменение потребностей LogRecord
нужно делать с осторожностью, но это позволяет вводить контекстные
информацию в журналы (см. Использование фильтров для передачи контекстной информации).
Объекты LogRecord
Экземпляры LogRecord
создаются автоматически Logger
каждый раз, когда что-то регистрируется, и может быть создано вручную с помощью makeLogRecord ()
(например, из маринованного события, полученного через
провод).
- класс
лесозаготовка.
LogRecord
( имя , уровень , путь , белье , msg , args , exc_info , func = None , sinfo = None ) Содержит всю информацию, относящуюся к регистрируемому событию.
Первичная информация передается в
msg
иargs
, которые объединены с использованиемmsg% args
для создания поляmessage
записывать.- Параметры
имя — Имя регистратора, используемого для регистрации события, представленного это 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}
в качестве заполнителя в строке формата. Если вы используете
$ -форматирование ( string.Template
), используйте форму $ {attrname}
. В
в обоих случаях, конечно, замените attrname
на фактическое имя атрибута
вы хотите использовать.
В случае {} -форматирования вы можете указать флаги форматирования, поместив их
после имени атрибута, отделенного от него двоеточием.Например: a
заполнитель {msecs: 03d}
форматирует значение в миллисекундах 4
как 004
. Обратитесь к документации str.format ()
для получения полной информации о
доступные вам варианты.
Имя атрибута | Формат | Описание |
---|---|---|
аргументы | Не нужно отформатируйте это сами. | Кортеж аргументов объединен в |
asctime | | Время, удобное для чтения, когда |
создано | | Время создания |
exc_info | Не нужно отформатируйте это сами. | Исключительный кортеж (как |
имя файла | | Имя файла — часть пути |
имя_функции | | Имя функции, содержащей вызов регистрации. |
имя уровня | | Уровень записи текста для сообщения
( |
уровень № | | Числовой уровень ведения журнала для сообщения
( |
белье | | Номер исходной строки, в которой был зарегистрирован вызов выдан (при наличии). |
сообщение | | Зарегистрированное сообщение, вычисленное как |
модуль | | Модуль (часть имени |
мсек | | Миллисекундная часть времени, когда |
сообщение | Не нужно отформатируйте это сами. | Строка формата, переданная в оригинале.
запись звонка. Объединено с |
наименование | | Имя регистратора, используемого для регистрации вызова. |
путь | | Полный путь к исходному файлу, в котором поступил вызов журнала (если таковой имеется). |
процесс | | Идентификатор процесса (при наличии). |
Имя процесса | | Имя процесса (если доступно). |
родственник Создан | | Время в миллисекундах, когда LogRecord был создан относительно времени регистрации модуль был загружен. |
stack_info | Не нужно отформатируйте это сами. | Информация о кадре стека (при наличии) снизу стека в текущем поток, до кадра стека включительно вызова журнала, который привел к создание этой записи. |
резьба | | ID резьбы (при наличии). |
резьба Наименование | | Название резьбы (при наличии). |
Изменено в версии 3.1: добавлено processName .
Объекты адаптера регистратора
Экземпляры LoggerAdapter
используются для удобной передачи контекстных
информация в журнале звонков. Пример использования см. В разделе
добавление контекстной информации к выходным данным журнала.
- класс
лесозаготовка.
Адаптер регистратора
(регистратор , дополнительный ) Возвращает экземпляр
LoggerAdapter
, инициализированный с помощью базовый экземплярLogger
и dict-подобный объект.-
процесс
( сообщение , kwargs ) Изменяет сообщение и / или аргументы ключевого слова, передаваемые вызову регистрации в чтобы вставить контекстную информацию. Эта реализация принимает объект передается конструктору как extra и добавляет его к kwargs с помощью ключа ‘дополнительный’. Возвращаемое значение — кортеж ( msg , kwargs ), который имеет (возможно, измененные) версии переданных аргументов.
-
В дополнение к вышесказанному, LoggerAdapter
поддерживает следующие
методы Logger
: debug ()
, info ()
, предупреждение ()
, ошибка ()
, исключение ()
, критический ()
, журнал ()
, isEnabledFor ()
, getEffectiveLevel ()
, setLevel ()
и hasHandlers ()
. Эти методы имеют те же сигнатуры, что и их
аналоги в Logger
, поэтому вы можете использовать два типа экземпляров
взаимозаменяемо.
Изменено в версии 3.6: добавлены атрибут manager
и метод _log ()
, которые
делегировать основному регистратору и разрешить вложение адаптеров.
Безопасность резьбы
Модуль регистрации предназначен для обеспечения многопоточности без каких-либо специальных работ. должны быть выполнены его клиентами. Это достигается с помощью потоковой передачи замки; есть одна блокировка для сериализации доступа к общим данным модуля, и каждый обработчик также создает блокировку для сериализации доступа к своему базовому вводу-выводу.
Если вы реализуете асинхронные обработчики сигналов с помощью сигнала
модуль, возможно, вы не сможете использовать ведение журнала из таких обработчиков. Это
поскольку реализации блокировки в модуле 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)
напечатает что-то вроде:
2006-02-08 22: 20: 02,165 192.168.0.1 fbloggs Проблема протокола: сброс соединения
Ключи в словаре, переданные в extra , не должны конфликтовать с используемыми ключами системой регистрации.(Дополнительную информацию см. В документации
Formatter
. информация о том, какие ключи используются системой регистрации.)Если вы решите использовать эти атрибуты в регистрируемых сообщениях, вам необходимо некоторая осторожность. В приведенном выше примере, например,
Formatter
был настроить со строкой формата, которая ожидает «clientip» и «user» в атрибуте словарь LogRecord. Если они отсутствуют, сообщение не будет регистрируется, потому что произойдет исключение форматирования строки.Итак, в этом случае вы всегда нужно передавать дополнительный словарь с этими ключами.Хотя это может раздражать, эта функция предназначена для использования в специализированных обстоятельства, такие как многопоточные серверы, где один и тот же код выполняется в многие контексты и интересные условия, которые возникают, зависят от этого контекст (например, IP-адрес удаленного клиента и аутентифицированное имя пользователя в пример выше). В таких условиях вполне вероятно, что специализированные
Formatter
s будет использоваться с конкретнымHandler
s.Изменено в версии 3.2: добавлен параметр stack_info .
-
лесозаготовка.
информация
( сообщение , * args , ** kwargs ) Регистрирует сообщение с уровнем
ИНФОРМАЦИЯ
в корневом регистраторе. Аргументы интерпретируется какdebug ()
.
-
лесозаготовка.
предупреждение
( msg , * args , ** kwargs ) Регистрирует сообщение с уровнем
WARNING
в корневом регистраторе.Аргументы интерпретируются какdebug ()
.Примечание
Имеется устаревшая функция
warn
, которая функционально идентично предупреждению
-
лесозаготовка.
ошибка
( msg , * args , ** kwargs ) Регистрирует сообщение с уровнем
ОШИБКА
в корневом регистраторе.Аргументы интерпретируется какdebug ()
.
-
лесозаготовка.
критический
( сообщение , * args , ** kwargs ) Регистрирует сообщение с уровнем
КРИТИЧЕСКИЙ
в корневом регистраторе. Аргументы интерпретируются какdebug ()
.
-
лесозаготовка.
исключение
( сообщение , * args , ** kwargs ) Регистрирует сообщение с уровнем
ОШИБКА
в корневом регистраторе.Аргументы интерпретируется какdebug ()
. Информация об исключении добавляется в журнал сообщение. Эта функция должна вызываться только из обработчика исключений.
-
лесозаготовка.
журнал
( уровень , сообщение , * args , ** kwargs ) Регистрирует сообщение с уровнем уровень в корневом регистраторе. Другие аргументы интерпретируется как
debug ()
.Примечание
Указанные выше вспомогательные функции на уровне модуля, которые делегируют корневого регистратора, вызовите
basicConfig ()
, чтобы убедиться, что хотя бы один обработчик доступен.Из-за этого в потоках следует использовать , а не , в версиях Python до 2.7.1 и 3.2, если хотя бы один обработчик был добавлен в корневой регистратор до , потоки начал. В более ранних версиях Python из-за недостатка безопасности потоков вbasicConfig ()
это может (в редких случаях) привести к обработчики добавляются несколько раз к корневому регистратору, который, в свою очередь, может привести к нескольким сообщениям для одного и того же события.
-
лесозаготовка.
отключить
(уровень = КРИТИЧЕСКИЙ ) Обеспечивает приоритетный уровень , уровень для всех регистраторов, который имеет приоритет над собственный уровень регистратора. Когда возникает необходимость временно ограничить ведение журнала вывод вниз по всему приложению, эта функция может быть полезной. Его эффект заключается в отключении всех вызовов журналирования с уровнем серьезности и ниже, так что если вы вызовете его со значением INFO, тогда все события INFO и DEBUG будут отброшены, тогда как сообщения серьезности WARNING и выше будут обработаны в соответствии с эффективным уровнем регистратора.Если
logging.disable (logging.NOTSET) вызывается
, он эффективно удаляет это уровень переопределения, так что вывод журнала снова зависит от эффективного уровни индивидуальных регистраторов.Обратите внимание, что если вы определили какой-либо пользовательский уровень ведения журнала выше, чем
CRITICAL
(это не рекомендуется), вы не сможете полагаться на значение по умолчанию для параметра level , но необходимо явно указать подходящее значение.Изменено в версии 3.7: Параметр level был по умолчанию установлен на уровень
CRITICAL
.Видеть bpo-28524 для получения дополнительной информации об этом изменении.
-
лесозаготовка.
addLevelName
( уровень , levelName ) Associates level level с текстом levelName во внутреннем словаре, который используется для отображения числовых уровней в текстовое представление, например, когда
Formatter
форматирует сообщение. Эту функцию также можно использовать для определения ваши собственные уровни. Единственное ограничение — все используемые уровни должны быть зарегистрированные с помощью этой функции, уровни должны быть положительными целыми числами, и они должен увеличиваться в порядке возрастания серьезности.Примечание
Если вы думаете об определении собственных уровней, см. раздел о пользовательских уровнях.
-
лесозаготовка.
getLevelName
( уровень ) Возвращает текстовое или числовое представление уровня ведения журнала уровень .
Если уровень является одним из предопределенных уровней
КРИТИЧЕСКИЙ
,ОШИБКА
,WARNING
,INFO
илиDEBUG
, тогда вы получите соответствующая строка.Если вы связали уровни с именами, используяaddLevelName ()
, тогда имя, которое вы связали с уровнем , будет вернулся. Если числовое значение, соответствующее одному из определенных уровней, равно передается, возвращается соответствующее строковое представление.Параметр 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. Обратите внимание, что этот аргумент несовместим с filename — если оба присутствуют, возникает
ValueError
.манипуляторы
Если указано, это должно быть повторением уже созданные обработчики для добавления в корень регистратор. Любые обработчики, которые еще не иметь набор форматировщиков будет назначен форматировщик по умолчанию, созданный в этой функции. Обратите внимание, что этот аргумент несовместим с имя файла или поток — если оба присутствуют, возникает
ValueError
.усилие
Если этот аргумент ключевого слова задан как правда, любые существующие обработчики, прикрепленные к корневой регистратор удаляется и закрывается, прежде чем выполнение конфигурации, как указано другими аргументами.
кодировка
Если этот аргумент ключевого слова указан вместе с имя файла , его значение используется, когда FileHandler создается и поэтому используется, когда открытие выходного файла.
ошибок
Если этот аргумент ключевого слова указан вместе с имя файла , его значение используется, когда FileHandler создается и поэтому используется, когда открытие выходного файла.Если не указано, используется значение «обратная косая черта». Примечание что если
None
не указано, он будет передано как таковое в func: open , что означает что это будет рассматриваться так же, как передача «Ошибки».Изменено в версии 3.2: добавлен аргумент стиля .
Изменено в версии 3.3: добавлен аргумент обработчиков . Добавлены дополнительные проверки в поймать ситуации, когда указаны несовместимые аргументы (например,грамм. обработчики вместе с потоком или имя файла или поток вместе с , имя файла ).
Изменено в версии 3.8: добавлен аргумент force .
Изменено в версии 3.9: добавлены аргументы кодирования и ошибок .
-
лесозаготовка.
выключение
() Информирует систему регистрации о необходимости правильного отключения путем промывки и закрытие всех обработчиков.Это должно вызываться при выходе из приложения и нет дальнейшее использование системы регистрации должно быть произведено после этого вызова.
Когда модуль регистрации импортируется, он регистрирует эту функцию как выход обработчик (см.
atexit
), поэтому обычно в этом нет необходимости вручную.
-
лесозаготовка.
набор LoggerClass
( класс ) Указывает системе ведения журнала использовать класс klass при создании экземпляра средства ведения журнала.Класс должен определять
__init __ ()
так, чтобы только аргумент имени был требуется, а__init __ ()
должен вызыватьLogger .__ init __ ()
. Этот функция обычно вызывается до того, как какие-либо регистраторы будут созданы приложениями. которым необходимо использовать настраиваемое поведение регистратора. После этого звонка, как и при любом другом время, не создавайте экземпляры регистраторов напрямую с помощью подкласса: продолжайте использовать APIlogging.getLogger ()
для получения ваших регистраторов.
-
лесозаготовка.
setLogRecordFactory
( завод ) Установите вызываемый объект, который используется для создания
LogRecord
.- Параметры
factory — Заводской вызов, который будет использоваться для создания экземпляра записи журнала.
Новое в версии 3.2: эта функция была предоставлена вместе с
getLogRecordFactory ()
для позволяют разработчикам больше контролировать, какLogRecord
представляет создается событие регистрации.Завод имеет подпись:
factory (имя, уровень, fn, lno, msg, args, exc_info, func = None, sinfo = None, ** kwargs)
- наименование
Имя регистратора.
- уровень
Уровень ведения журнала (числовой).
- fn
Полный путь к файлу, в котором был выполнен вызов журнала.
- lno
Номер строки в файле, где был выполнен вызов журнала.
- сообщение
Сообщение журнала.
- аргументы
Аргументы для сообщения журнала.
- exc_info
Исключительный кортеж или
Нет
.- функция
Имя функции или метода, которые вызвали ведение журнала. вызов.
- синфо
Отслеживание стека, например, предоставляемое
traceback.print_stack ()
, показывающий иерархию вызовов.- кварг
Дополнительные аргументы ключевого слова.
Атрибуты уровня модуля
-
лесозаготовка.
lastResort
«Обработчик последней инстанции» доступен через этот атрибут. Этот это
StreamHandler
, записывающий вsys.stderr
с уровнемWARNING
, и используется для обработки событий регистрации в отсутствие каких-либо конфигурация журналирования.Конечный результат — просто распечатать сообщение наsys.stderr
. Это заменяет предыдущее сообщение об ошибке, в котором говорилось, что «Для логгера XYZ обработчики не найдены». Если вам нужно раньше поведение по какой-то причинеlastResort
можно установить наNone
.
Интеграция с модулем предупреждений
Функция captureWarnings ()
может использоваться для интеграции регистрации
с модулем предупреждений
.
-
лесозаготовка.
захват Предупреждения
( захват ) Эта функция используется для включения сбора предупреждений при входе в систему и выключенный.
Если захват равен
Истина
, предупреждения, выдаваемые модулемпредупреждений
, будут быть перенаправленным в систему ведения журнала. В частности, предупреждение будет форматируется с использованием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
в стандартный библиотека.
logging.handlers — Обработчики журналов — документация Python 3.9.7
Исходный код: 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
( поток ) Устанавливает для потока экземпляра указанное значение, если оно отличается. Старый поток очищается до установки нового потока.
- Параметры
поток — поток, который должен использовать обработчик.
- Возвращает
старый поток, если поток был изменен, или Нет , если нет.
-
терминатор
Строка, используемая в качестве признака конца при записи форматированной записи в поток.Значение по умолчанию —
'\ n'
.Если вам не нужно завершение новой строки, вы можете установить для экземпляра обработчика
признак конца
к пустой строке.В более ранних версиях терминатор был жестко запрограммирован как
'\ n'
.
-
FileHandler
Класс FileHandler
, расположенный в ядре пакета регистрации
,
отправляет вывод журнала в файл на диске. Он наследует функциональность вывода от Обработчик потока
.
- класс
лесозаготовка.
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
для блокировки, так как нет базовый ввод-вывод, доступ к которому должен быть сериализован.
-
См. Настройка ведения журнала для библиотеки для получения дополнительной информации о том, как использовать Нулевой Обработчик
.
НаблюдалFileHandler
Класс WatchedFileHandler
, расположенный в logging.handlers
module — это 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
( имя файла , режим , кодировка = Нет , delay = False , ошибок = Нет ) Параметры такие же, как для
FileHandler
.Атрибуты:-
наименование
Если для этого атрибута установлено значение вызываемого,
имя_файла_ вращения ()
метод делегирует этому вызываемому объекту. Параметры, переданные вызываемому — это те, которые передаются в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 , atTime = Нет , ошибок = Нет ) Возвращает новый экземпляр класса
TimedRotatingFileHandler
.В указанный файл открывается и используется как поток для регистрации. При вращении также устанавливает суффикс имени файла. Вращение происходит на основе произведения , когда и интервал .Вы можете использовать , когда , чтобы указать тип интервала . Список возможных значения ниже. Обратите внимание, что они не чувствительны к регистру.
Значение
Тип интервала
Если / как используется atTime
'S'
секунды
Игнорируется
'M'
Минуты
Игнорируется
'В'
Часы
Игнорируется
'D'
дней
Игнорируется
'W0' - 'W6'
будний день (0 = понедельник)
Используется для вычисления начального время опрокидывания
«полночь»
Перевернуться в полночь, если atTime не указано, иначе во время во время
Используется для вычисления начального время опрокидывания
При использовании ротации на основе дня недели укажите «W0» для понедельника, «W1» для Вторник и так далее до «W6» воскресенья.В этом случае значение, переданное для интервал не используется.
Система сохранит старые файлы журналов, добавив расширения к имени файла. Расширения основаны на дате и времени с использованием формата strftime.
% Y-% m-% d_% H-% M-% S
или его ведущая часть, в зависимости от интервал опрокидывания.При первом вычислении времени следующего опрокидывания (когда обработчик создается), время последней модификации существующего файла журнала, или иначе текущее время используется для вычисления, когда произойдет следующее вращение.
Если аргумент utc истинен, будет использоваться время в формате UTC; иначе используется местное время.
Если backupCount отличен от нуля, не более файлов backupCount будет сохранен, и если будет создано больше, когда произойдет ролловер, самый старый один удален. Логика удаления использует интервал, чтобы определить, какие файлы для удаления, поэтому изменение интервала может привести к тому, что старые файлы останутся лежать без дела.
Если delay истинно, то открытие файла откладывается до первого обращения к
испускать ()
.Если 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 ()
-
handleОшибка
() Обрабатывает ошибку, возникшую во время
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
, расположенный в 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 аргумент, который по умолчанию — сокет.SOCK_DGRAM
и, следовательно, открывает сокет UDP. Чтобы открыть сокет TCP (для использования с новым системным журналом) демоны, такие как rsyslog), укажите значениеsocket.SOCK_STREAM
.Обратите внимание, что если ваш сервер не прослушивает UDP-порт 514,
SysLogHandler
может не работать. В таком случае проверьте, что адрес, который вы должны использовать для доменного сокета — он зависит от системы. Например, в Linux это обычно «/ dev / log», но в OS / X это ‘/ Var / run / syslog’. Вам нужно будет проверить свою платформу и использовать соответствующий адрес (вам может потребоваться выполнить эту проверку во время выполнения, если ваш приложение необходимо запускать на нескольких платформах).В Windows ты хорошенькая многим приходится использовать опцию UDP.Изменено в версии 3.2: добавлен сокет .
-
закрыть
() Закрывает сокет для удаленного хоста.
-
испустить
( запись ) Запись форматируется, а затем отправляется на сервер системного журнала. Если исключение информация присутствует, это , а не , отправленные на сервер.
Изменено в версии 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
LPR
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 соответствующая запись реестра создается с использованием этого имени. dllname должен давать полный путь к файлу .dll или .exe, который содержит сообщение определения для хранения в журнале (если не указано, используется'win32service.pyd'
— устанавливается с расширениями Win32 и содержит некоторые базовые определения сообщений-заполнителей. Обратите внимание, что использование этих заполнителей сделает ваши журналы событий большие, так как в журнале содержится весь источник сообщений. если ты хотите более тонкие журналы, вы должны передать имя вашего собственного .dll или .exe, которое содержит определения сообщений, которые вы хотите использовать в журнале событий).В logtype является одним из«Приложение»
,«Система»
или«Безопасность»
и по умолчанию«Приложение»
.-
закрыть
() На этом этапе вы можете удалить имя приложения из реестра как источник записей журнала событий. Однако, если вы это сделаете, вы не сможете чтобы увидеть события, как вы планировали, в средстве просмотра журнала событий — это должно быть может получить доступ к реестру, чтобы получить имя .dll.Текущая версия не делай этого.
-
испустить
( запись ) Определяет идентификатор сообщения, категорию события и тип события, а затем регистрирует сообщение в журнале событий NT.
-
getEventCategory
( запись ) Возвращает категорию события для записи. Отмените это, если хотите укажите свои собственные категории. Эта версия возвращает 0.
-
getEventType
( запись ) Возвращает тип события для записи.Отмените это, если хотите укажите свои собственные типы. Эта версия выполняет сопоставление с помощью обработчика атрибут typemap, который установлен в
__init __ ()
для словаря который содержит сопоставления дляDEBUG
,INFO
,ПРЕДУПРЕЖДЕНИЕ
,ОШИБКА
иКРИТИЧЕСКАЯ
. Если вы используете ваши собственные уровни, вам нужно будет либо переопределить этот метод, либо разместить подходящий словарь в атрибуте typemap обработчика.
-
getMessageID
( запись ) Возвращает идентификатор сообщения для записи.Если вы используете свои собственные сообщения, вы можете сделать это, передав в регистратор сообщение msg , являющееся идентификатором а не строку формата. Тогда здесь вы можете использовать словарь поиск, чтобы получить идентификатор сообщения. Эта версия возвращает 1, что является базовым идентификатор сообщения в
win32service.pyd
.
-
Обработчик SMTP
Класс 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: добавлен аргумент timeout .
-
испустить
( запись ) Форматирует запись и отправляет ее указанным адресатам.
-
getSubject
( запись ) Если вы хотите указать строку темы, которая зависит от записи, переопределите Этот способ.
-
Обработчик памяти
Класс MemoryHandler
, расположенный в модуле logging.handlers
,
поддерживает буферизацию журнальных записей в памяти, периодически сбрасывая их в target обработчик. Сброс происходит всякий раз, когда буфер заполнен, или когда
событие определенной степени тяжести или выше.
MemoryHandler
является подклассом более общего BufferingHandler
, абстрактный класс.Это буферизует ведение журнала
записи в памяти. Всякий раз, когда каждая запись добавляется в буфер, выполняется проверка
вызывая shouldFlush ()
, чтобы узнать, следует ли очистить буфер. Если оно
should, то ожидается, что flush ()
выполнит промывку.
- класс
лесозаготовительные. Погрузчики.
BufferingHandler
(емкость , ) Инициализирует обработчик с буфером указанной емкости. Здесь, Емкость означает количество буферизованных записей журнала.
-
испустить
( запись ) Добавить запись в буфер. Если
shouldFlush ()
возвращает истину, вызовитеflush ()
для обработки буфера.
-
заподлицо
() Вы можете переопределить это, чтобы реализовать настраиваемое поведение промывки. Эта версия просто очищает буфер до пустого.
-
shouldFlush
( запись ) Вернуть
Истина
, если буфер заполнен до предела.Этот метод может быть переопределено для реализации пользовательских стратегий промывки.
-
- класс
лесозаготовительные. Погрузчики.
MemoryHandler
(емкость , flushLevel = ERROR , target = None , flushOnClose = True ) Возвращает новый экземпляр класса
MemoryHandler
. Экземпляр инициализируется размером буфера , вместимостью (количество буферизованных записей).Если flushLevel не указан, используетсяОШИБКА
. Если нет цель указано, цель должна быть установлена с помощьюsetTarget ()
перед этим обработчик делает что-нибудь полезное. Если flushOnClose указано какFalse
, тогда буфер , а не сбрасывается при закрытии обработчика. Если не указано или указано какTrue
, предыдущее поведение очистки буфера будет происходят, когда обработчик закрыт.Изменено в версии 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
( запись ) Предоставляет словарь на основе записи
запись .__ dict__
. Этот метод можно переопределить, если, например, только подмножествоLogRecord
должно быть отправлено на веб-сервер, или если требуется более конкретная настройка того, что отправляется на сервер.
-
испустить
( запись ) Отправляет запись на веб-сервер в виде словаря в кодировке URL. В
mapLogRecord () Метод
используется для преобразования записи в словарь для отправки.
-
Обработчик очереди
Класс QueueHandler
, расположенный в модуле logging.handlers
,
поддерживает отправку сообщений журнала в очередь, например, реализованных в очередь
или многопроцессорных
модулей.
Наряду с классом QueueListener
можно использовать QueueHandler
чтобы позволить обработчикам выполнять свою работу в отдельном потоке от того, который выполняет
протоколирование. Это важно в веб-приложениях, а также в других сервисах.
приложения, в которых потоки, обслуживающие клиентов, должны отвечать так быстро, как
возможно, в то время как любые потенциально медленные операции (например, отправка электронной почты через SMTPHandler
) выполняются в отдельном потоке.
- класс
лесозаготовка.обработчики.
Обработчик очереди
( очередь ) Возвращает новый экземпляр класса
QueueHandler
. Экземпляр инициализируется очередью для отправки сообщений. Очередь может быть любой объект очереди; он используется как есть методомenqueue ()
, который нужно знать, как отправлять на него сообщения. Очередь не требуется до иметь API отслеживания задач, что означает, что вы можете использоватьэкземпляров SimpleQueue
для очереди .-
испустить
( запись ) Ставит в очередь результат подготовки LogRecord. Если исключение происходят (например, из-за того, что ограниченная очередь заполнена),
handleError () Метод
вызывается для обработки ошибка. Это может привести к тихому отбрасыванию записи (еслиlogging.raiseExceptions
isFalse
) или сообщение, напечатанное на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 конфигурации для модуля регистрации.
logging.config — Конфигурация ведения журнала — Документация по Python 3.9.7
В этом разделе описывается API для настройки модуля регистрации.
Функции конфигурации
Следующие функции настраивают модуль регистрации. Они расположены в logging.config
модуль. Их использование необязательно — вы можете настроить
модуль регистрации с использованием этих функций или путем вызова основного API (определенного
в , регистрируя сам
) и определяя обработчики, которые объявлены либо в каротаж
или каротаж.Манипуляторы
.
-
logging.config.
dictConfig
( конфигурация ) Берет конфигурацию журналирования из словаря. Содержание этот словарь описан в схеме словаря конфигурации ниже.
Если во время настройки обнаружена ошибка, эта функция будет вызвать
ValueError
,TypeError
,AttributeError
илиImportError
с соответствующим описательным сообщением.В Ниже приводится (возможно, неполный) список условий, которые вывести ошибку:Уровень
передает значение
, которое не является логическим.Идентификатор, не имеющий соответствующего назначения.
Несуществующий идентификатор обработчика, обнаруженный во время инкрементного вызова.
Недопустимое имя регистратора.
Неспособность разрешить внутренний или внешний объект.
Разбор выполняется классом
DictConfigurator
, чей конструктору передается словарь, используемый для конфигурации, и имеетметод configure ()
. Модульlogging.config
имеет вызываемый атрибутdictConfigClass
который изначально установлен наDictConfigurator
. Вы можете заменить значениеdictConfigClass
на подходящая реализация по своему усмотрению.dictConfig ()
вызываетdictConfigClass
, передавая указанный словарь, а затем вызывает методconfigure ()
на возвращенный объект, чтобы применить конфигурацию:def dictConfig (конфигурация): dictConfigClass (конфигурация) .configure ()
Например, подкласс
DictConfigurator
может вызыватьDictConfigurator .__ init __ ()
в собственном__init __ ()
, затем настроить собственные префиксы, которые можно будет использовать в последующемнастроить ()
вызов.dictConfigClass
будет привязан к этот новый подкласс, а затемdictConfig ()
может вызываться точно так же, как в ненастроенном состоянии по умолчанию.
-
logging.config.
fileConfig
( fname , по умолчанию = Нет , disable_existing_loggers = True ) Считывает конфигурацию ведения журнала из файла
configparser в формате
. В формат файла должен соответствовать описанию в Формат файла конфигурации.Эту функцию можно вызывать несколько раз из приложения, что позволяет конечный пользователь может выбирать из различных заранее подготовленных конфигураций (если разработчик предоставляет механизм для представления вариантов и загрузки выбранных конфигурация).- Параметры
fname — Имя файла, или файловый объект, или производный экземпляр из
RawConfigParser
. ЕслиRawConfigParser - экземпляр, производный от
, передается, он используется как является. В противном случаеConfigparser
будет создан экземпляр, и конфигурация, прочитанная им из объект передан вfname
.Если этострока чтения ()
, предполагается, что он является файловым объектом и читается с использованиемread_file ()
; иначе, предполагается, что это имя файла и передается вчитать ()
.defaults — Можно указать значения по умолчанию для передачи в ConfigParser в этом аргументе.
disable_existing_loggers — Если указано как
False
, регистраторы, которые существуют, когда этот вызов сделан, остались включено.По умолчаниюTrue
, потому что это позволяет старому поведению в обратно-совместимый способ. Это поведение отключите любые существующие регистраторы без полномочий root, если они или их предки явно названы в конфигурации ведения журнала.
Изменено в версии 3.4: Экземпляр подкласса
RawConfigParser
теперь принято как значение дляfname
. Это способствует:Использование файла конфигурации, где конфигурация ведения журнала является лишь частью общей конфигурации приложения.
Использование конфигурации, считанной из файла, а затем измененной с помощью приложение (например, на основе параметров командной строки или других аспектов среды выполнения) перед передачей в
fileConfig
.
-
logging.config.
слушать
( порт = DEFAULT_LOGGING_CONFIG_PORT , verify = None ) Запускает сервер сокетов на указанном порту и ожидает новых конфигурации.Если порт не указан, модуль по умолчанию
DEFAULT_LOGGING_CONFIG_PORT
используется. Конфигурации журналирования будут отправлено как файл, пригодный для обработкиdictConfig ()
илиfileConfig ()
. ВозвращаетThread
экземпляр, на котором вы можете вызватьstart ()
, чтобы запустить сервер, и который при необходимости вы можетеjoin ()
. Чтобы остановить сервер, вызовитеstopListening ()
.Аргумент
verify
, если он указан, должен быть вызываемым, который должен проверить, действительны ли байты, полученные через сокет, и должны ли они быть обработанный.Это можно сделать, зашифровав и / или подписав то, что отправлено. через сокет, так чтоverify
callable может выполнять проверка подписи и / или расшифровка. Вызываетсяverify
callable с одним аргументом — байты, полученные через сокет — и должны вернуть байты для обработки, илиНет
, чтобы указать, что байты должны быть отброшенным. Возвращенные байты могут быть такими же, как переданные байты (например, когда выполняется только проверка), или они могут быть совершенно разными (возможно, если бы расшифровка проводилась).Чтобы отправить конфигурацию в сокет, прочтите файл конфигурации и отправить его в сокет как последовательность байтов, которым предшествует четырехбайтовая длина строка, упакованная в двоичном формате с использованием
struct.pack ('> L', n)
.Примечание
Поскольку части конфигурации проходят через
eval ()
, использование этой функции может подвергнуть пользователей риску безопасности. Хотя функция привязывается только к сокету наlocalhost
, как и не принимать соединения с удаленных машин, есть сценарии, где ненадежный код может быть запущен под учетной записью процесса, который вызываетслушать ()
.В частности, если процесс, вызывающийlisten ()
, запускается на многопользовательской машине, где пользователи не могут доверять друг другу, тогда злонамеренный пользователь может организовать запуск произвольного кода в процесс пользователя жертвы, просто подключившись кlisten ()
socket и отправка конфигурации, которая запускает все код, который злоумышленник хочет выполнить в процессе жертвы. Это особенно легко сделать, если используется порт по умолчанию, но не сложно, даже если используется другой порт).Чтобы этого не произошло, используйтепроверьте аргумент
дляlisten ()
для предотвращения нераспознанных конфигурации от применяемых.Изменено в версии 3.4: добавлен аргумент
verify
.Примечание
Если вы хотите отправить слушателю конфигурации, которые не отключите существующие регистраторы, вам нужно будет использовать формат JSON для конфигурация, которая будет использовать
dictConfig ()
для конфигурации. Этот метод позволяет указатьdisable_existing_loggers
какНеверно
в отправляемой вами конфигурации.
-
logging.config.
стоп Прослушивание
() Останавливает прослушивающий сервер, созданный с помощью вызова
listen ()
. Обычно это вызывается перед вызовомjoin ()
для возвращаемого значения изслушать ()
.
Схема словаря конфигурации
Описание конфигурации регистрации требует перечисления различных
объекты для создания и связи между ними; например, ты
может создать обработчик с именем «console», а затем сказать, что регистратор
с именем «startup» отправляет свои сообщения обработчику «console».Эти объекты не ограничиваются объектами, предоставленными logging
модуль, потому что вы можете написать свой собственный класс форматирования или обработчика.
В параметры этих классов также может потребоваться включить внешние
такие объекты, как sys.stderr
. Синтаксис для описания этих
Объекты и соединения определены в Связях объектов
ниже.
Подробная информация о схеме словаря
Словарь, переданный в dictConfig ()
, должен содержать следующее
ключи:
версия — для установки целочисленного значения, представляющего схему версия.Единственное допустимое значение в настоящее время — 1, но с этим ключом позволяет схеме развиваться, сохраняя при этом обратную совместимость.
Все остальные ключи необязательны, но если они есть, они будут интерпретированы
как описано ниже. Во всех приведенных ниже случаях, когда используется «configuring dict»
упоминалось, будет проверяться наличие специального ключа '()'
, чтобы увидеть, есть ли
требуется настраиваемый экземпляр. Если да, то механизм, описанный в
Определяемые пользователем объекты ниже используются для создания экземпляра;
в противном случае контекст используется для определения того, что создавать.
formatters — соответствующее значение будет dict, в котором каждый ключ — это идентификатор средства форматирования, а каждое значение — это диктовка, описывающая, как настроить соответствующий экземпляр
Formatter
.Конфигурационный dict ищется по ключам
формат
иdatefmt
(со значениями по умолчаниюНет
), и они используются для созданияFormatter
экземпляр.Изменено в версии 3.8: ключ проверки
True
) может быть добавлен в раздел форматировщиков конфигурационного dict, это для проверить формат.фильтры — соответствующее значение будет диктовкой, в которой каждая клавиша — это идентификатор фильтра, а каждое значение — это диктовка, описывающая, как настроить соответствующий экземпляр фильтра.
В конфигурационном слове ищется ключ
, имя
(по умолчанию пустая строка), и это используется для создания журнала. Фильтр
пример.обработчиков — соответствующее значение будет dict, в котором каждый key — это идентификатор обработчика, а каждое значение — это диктовка, описывающая, как настроить соответствующий экземпляр обработчика.
В конфигурационном слове ищутся следующие ключи:
кл.
(обязательно). Это полное имя класс обработчика.уровень
(необязательно). Уровень обработчика.форматтер
(дополнительно). Идентификатор форматера для этого обработчик.фильтры
(опционально). Список идентификаторов фильтров для этого обработчик.
Все других ключей передаются как аргументы ключевого слова в конструктор обработчика.Например, учитывая фрагмент:
обработчиков: консоль: класс: logging.StreamHandler форматтер: краткий уровень: ИНФОРМАЦИЯ фильтры: [allow_foo] поток: ext: //sys.stdout файл: класс: logging.handlers.RotatingFileHandler форматер: точный имя файла: logconfig.log maxBytes: 1024 backupCount: 3
обработчик с идентификатором
console
создается какlogging.StreamHandler
, используяsys.stdout
в качестве основного транслировать.Обработчик с идентификаторомфайла
создается какlogging.handlers.RotatingFileHandler
с ключевыми аргументамиfilename = 'logconfig.log', maxBytes = 1024, backupCount = 3
.логгеров — соответствующее значение будет диктовкой, в которой каждый ключ имя регистратора, а каждое значение — диктант, описывающий, как настроить соответствующий экземпляр Logger.
В конфигурационном слове ищутся следующие ключи:
уровень
(опционально).Уровень логгера.размножить
(необязательно). Настройка распространения логгера.фильтры
(опционально). Список идентификаторов фильтров для этого регистратор.манипуляторы
(опционально). Список идентификаторов обработчиков для этого регистратор.
Указанные регистраторы будут настроены в соответствии с уровнем, распространение, указанные фильтры и обработчики.
root — это будет конфигурация корневого регистратора.Обработка конфигурации будет как для любого регистратора, кроме что настройка
распространения
не будет применима.инкрементальный — следует ли интерпретировать конфигурацию как инкрементно к существующей конфигурации. По умолчанию это значение
Ложь
, что означает, что указанная конфигурация заменяет существующая конфигурация с той же семантикой, которая используется существующийfileConfig ()
API.Если указанное значение —
Истина
, конфигурация обрабатывается. как описано в разделе «Пошаговая конфигурация».disable_existing_loggers — есть ли какие-либо существующие регистраторы без полномочий root быть инвалидом. Этот параметр отражает одноименный параметр в
fileConfig ()
. В случае отсутствия этот параметр по умолчанию равенTrue
. Это значение игнорируется, если инкрементальный равенTrue
.
Инкрементальная конфигурация
Трудно обеспечить полную гибкость для инкрементального конфигурация. Например, потому что такие объекты, как фильтры и форматировщики анонимны, после настройки конфигурации она невозможно ссылаться на такие анонимные объекты при расширении конфигурация.
Кроме того, нет веских оснований для произвольного изменения граф объектов логгеров, обработчиков, фильтров, форматеров на время выполнения после настройки конфигурации; многословие лесорубов и обработчиками можно управлять, просто задавая уровни (а в случае регистраторы, флаги распространения). Произвольное изменение графа объекта в безопасный способ проблематичен в многопоточной среде; в то время как не невозможно, преимущества не стоят той сложности, которую он добавляет к реализация.
Таким образом, когда присутствует инкрементный ключ
конфигурационного dict
и имеет значение True
, система полностью игнорирует любые программы форматирования ,
и фильтрует
записей и обрабатывает только уровень
настройки в обработчиках
записей, а также на уровне
и распространяет настройки
в регистраторы
и корневые записи
.
Использование значения в конфигурационном dict позволяет отправлять конфигурации по проводу, как маринованный диктатор слушателю сокета.Таким образом, ведение журнала многословность долго работающего приложения может быть изменена с течением времени с помощью нет необходимости останавливать и перезапускать приложение.
Связи объектов
Схема описывает набор объектов логирования — логгеров, обработчики, форматеры, фильтры — которые связаны друг с другом в граф объекта. Таким образом, схема должна представлять соединения. между объектами. Например, предположим, что после настройки конкретный регистратор прикрепил к нему определенный обработчик. Для целей этого обсуждения, мы можем сказать, что регистратор представляет источник, а обработчик — место назначения соединения между два.Конечно, в настроенных объектах это представлено logger, содержащий ссылку на обработчик. В конфигурации dict, это делается путем присвоения каждому объекту назначения идентификатора, который идентифицирует это однозначно, а затем с использованием идентификатора в исходном объекте конфигурация, чтобы указать, что существует соединение между источником и целевой объект с этим идентификатором.
Так, например, рассмотрим следующий фрагмент YAML:
Форматеры: краткий: # конфигурация для форматировщика с идентификатором short находится здесь точный: # здесь находится конфигурация для форматировщика с идентификатором точный обработчики: h2: # Это идентификатор # здесь идет конфигурация обработчика с id 'h2' форматтер: краткий h3: # Это еще один id # здесь идет конфигурация обработчика с id 'h3' форматер: точный регистраторы: фу.bar.baz: # другая конфигурация для логгера 'foo.bar.baz' обработчики: [h2, h3]
(Примечание: здесь используется YAML, потому что он немного более читабелен, чем эквивалентная исходная форма Python для словаря.)
Идентификаторы регистраторов — это имена регистраторов, которые будут использоваться
программно, чтобы получить ссылку на эти регистраторы, например foo.bar.baz
. Идентификаторы форматеров и фильтров могут быть любой строкой.
значение (например, краткое
, точное
выше), и они являются временными,
в том, что они имеют значение только для обработки конфигурации
словаря и используются для определения связей между объектами, и являются
нигде не сохраняется после завершения вызова конфигурации.
Приведенный выше фрагмент указывает, что регистратор с именем foo.bar.baz
должен
к нему прикреплены два обработчика, которые описываются обработчиком
идентификаторы h2
и h3
. Форматер для h2
описан идентификатором short
, а форматтер для h3
описан идентификатором точный
.
Пользовательские объекты
Схема поддерживает определенные пользователем объекты для обработчиков, фильтров и форматеры.(Регистраторам не обязательно иметь разные типы для разные экземпляры, поэтому в этой конфигурации нет поддержки схема для определяемых пользователем классов регистратора.)
Объекты, подлежащие настройке, описаны словарями.
которые подробно описывают их конфигурацию. В некоторых местах система логирования
сможет сделать вывод из контекста, как объект должен быть
создается, но когда должен быть создан пользовательский объект,
система не будет знать, как это сделать. Чтобы предоставить полную
гибкость для создания экземпляров определяемых пользователем объектов, потребности пользователя
предоставить «фабрику» — вызываемый объект, который вызывается с
словарь конфигурации и который возвращает созданный объект.Об этом сигнализирует абсолютный путь импорта к фабрике,
предоставляется под специальным ключом '()'
. Вот конкретный
пример:
: краткий: формат: '% (сообщение) s' дефолт: формат: '% (asctime) s% (имя уровня) -8s% (имя) -15s% (сообщение) s' datefmt: '% Y-% m-% d% H:% M:% S' обычай: (): my.package.customFormatterFactory бар: баз спам: 99.9 ответ: 42
Приведенный выше фрагмент YAML определяет три средства форматирования. Первый, с идентификатором краткое
, это стандартный каротаж .Экземпляр Formatter
с
указанная строка формата. Второй, с идентификатором по умолчанию
, имеет
более длинный формат, а также явно определяет формат времени и будет
приведет к регистрации . Форматирование
инициализируется этими двумя форматами
струны. Показано в исходной форме Python, краткое описание
и по умолчанию
форматеры имеют подкаталоги конфигурации:
{ 'формат': '% (сообщение) s' }
и:
{ 'format': '% (asctime) s% (имя уровня) -8s% (имя) -15s% (сообщение) s', 'datefmt': '% Y-% m-% d% H:% M:% S' }
соответственно, и поскольку эти словари не содержат специального ключа '()'
, создание выводится из контекста: в результате
стандартная регистрация .Созданы экземпляры Formatter
. В
Подсловарь конфигурации для третьего средства форматирования с идентификатором кастом
, это:
{ '()': 'my.package.customFormatterFactory', 'бар': 'баз', 'спам': 99,9, 'ответ': 42 }
и содержит специальный ключ '()'
, что означает, что
требуется создание пользовательского экземпляра. В этом случае указанный
Factory callable будет использоваться. Если это действительно вызываемый объект, он будет
используется напрямую — в противном случае, если вы укажете строку (как в примере)
фактический вызываемый объект будет расположен с использованием обычных механизмов импорта.Вызываемый будет вызван с , оставшимися элементами в
вложенный словарь конфигурации в качестве аргументов ключевого слова. В приведенном выше
Например, форматтер с идентификатором custom
будет считаться
вернулся по звонку:
my.package.customFormatterFactory (bar = 'baz', spam = 99.9, answer = 42)
Ключ '()'
использовался как специальный ключ, потому что он не
допустимое имя параметра ключевого слова, поэтому не будет конфликтовать с именами
аргументы ключевого слова, используемые в вызове. '()'
также служит
мнемоника того, что соответствующее значение вызывается.
Доступ к внешним объектам
Бывают случаи, когда конфигурация должна ссылаться на объекты
внешний по отношению к конфигурации, например sys.stderr
. Если
конфигурационный dict создается с использованием кода Python, это
просто, но проблема возникает, когда конфигурация
предоставляется через текстовый файл (например, JSON, YAML). В текстовом файле есть
нет стандартного способа отличить sys.stderr
из буквальной строки 'sys.stderr'
. Чтобы облегчить это различие, конфигурация
система ищет определенные специальные префиксы в строковых значениях и
относитесь к ним особо. Например, если буквальная строка 'ext: //sys.stderr'
предоставляется как значение в конфигурации,
тогда ext: //
будет удален, а оставшаяся часть
значение обрабатывается с использованием обычных механизмов импорта.
Обработка таких префиксов выполняется аналогично протоколу
обработка: существует общий механизм поиска префиксов, которые
соответствует регулярному выражению ^ (? P <префикс> [a-z] +): // (? P <суффикс>.*) $
при этом, если распознается префикс
, обрабатывается суффикс в зависимости от префикса, и результат обработки заменяет
строковое значение. Если префикс не распознается, то строка
значение останется как есть.
Доступ к внутренним объектам
Наряду с внешними объектами иногда возникает необходимость ссылаться на
объектам в конфигурации. Это будет сделано неявно
система конфигурации для вещей, о которых он знает.Например,
строковое значение 'DEBUG'
для уровня
в регистраторе или обработчике будет
автоматически конвертируется в значение logging.DEBUG
, а обработчики
, фильтры
и форматировщик
записей будут принимать
идентификатор объекта и разрешите соответствующий объект назначения.
Однако для определяемых пользователем
объекты, которые не известны модулю регистрации
. Для
Например, рассмотрим ведение журнала .обработчики.MemoryHandler
, который принимает
аргумент target
, который является еще одним обработчиком, которому нужно делегировать. С
система уже знает об этом классе, то в конфигурации,
данная цель
просто должна быть идентификатором объекта соответствующего
целевой обработчик, и система разрешит обработчик из
я бы. Если, однако, пользователь определяет my.package.MyHandler
, который имеет
альтернативный обработчик
, система конфигурации не узнает, что
альтернативный номер
относится к обработчику.Для этого используется общий
система разрешения позволяет пользователю указать:
обработчиков: файл: # здесь находится конфигурация обработчика файлов обычай: (): my.package.MyHandler альтернатива: cfg: //handlers.file
Буквальная строка 'cfg: //handlers.file'
будет разрешена в
аналогичный способ для строк с префиксом ext: //
, но смотрящий
в самой конфигурации, а не в пространстве имен импорта. В
механизм позволяет доступ по точке или по индексу, аналогично
что предусмотрено ул.формат
. Таким образом, учитывая следующий фрагмент:
обработчиков: Эл. адрес: класс: logging.handlers.SMTPHandler mailhost: localhost fromaddr: [email protected] жабы: - [email protected] - [email protected] вопрос: Хьюстон, у нас проблема.
в конфигурации, строка 'cfg: // handlers'
будет преобразована в
dict с ключом , обработчики
, строка 'cfg: //handlers.email
разрешит dict с ключом email
в обработчиках
dict,
и так далее.Строка 'cfg: //handlers.email.toaddrs [1]
будет
разрешите 'dev_team.domain.tld'
и строку 'cfg: //handlers.email.toaddrs [0]'
преобразуется в значение '[email protected]'
. Можно получить доступ к субъекту
значение
используя либо 'cfg: //handlers.email.subject'
, либо, что эквивалентно, 'cfg: //handlers.email [subject]'
. Последняя форма должна быть только
используется, если ключ содержит пробелы или не буквенно-цифровые символы.Если
значение индекса состоит только из десятичных цифр, будет предпринята попытка доступа
используя соответствующее целочисленное значение, возвращаясь к строке
значение при необходимости.
Учитывая строку cfg: //handlers.myhandler.mykey.123
, это будет
разрешить config_dict ['обработчики'] ['myhandler'] ['mykey'] ['123']
.
Если строка указана как cfg: //handlers.myhandler.mykey [123]
,
система попытается получить значение из config_dict ['handlers'] ['myhandler'] ['mykey'] [123]
и откатиться назад
на config_dict ['handlers'] ['myhandler'] ['mykey'] ['123']
если это
терпит неудачу.
Разрешение импорта и пользовательские средства импорта
Разрешение импорта, по умолчанию, использует встроенную функцию __import __ ()
сделать его импорт. Вы можете заменить это своим собственным импортом
механизм: если это так, вы можете заменить атрибут импортера
в DictConfigurator
или его суперкласс, BaseConfigurator
класс. Однако вам нужно быть
осторожно из-за способа доступа к функциям из классов через
дескрипторы.Если вы используете вызываемый Python для импорта, и вы
хотите определить его на уровне класса, а не на уровне экземпляра, вам нужно обернуть
это с помощью статического метода ()
. Например:
из importlib import import_module из logging.config импортируйте BaseConfigurator BaseConfigurator.importer = staticmethod (import_module)
Вам не нужно обертывать staticmethod ()
, если вы настраиваете импорт
вызывается в конфигураторе , экземпляр .
Формат файла конфигурации
Формат файла конфигурации, который понимает fileConfig ()
, основан на configparser
функциональность.Файл должен содержать разделы, называемые [регистраторы]
, [обработчики]
и [средства форматирования]
, которые идентифицируют по имени
сущности каждого типа, которые определены в файле. Для каждого такого объекта существует
это отдельный раздел, который определяет, как настроен этот объект. Таким образом, для
регистратор с именем log01
в разделе [регистраторы]
, соответствующие
подробности конфигурации хранятся в разделе [logger_log01]
. Аналогично
обработчик с именем hand01
в разделе [handlers]
будет иметь свой
конфигурация хранится в разделе под названием [handler_hand01]
, в то время как средство форматирования
вызываемый form01
в разделе [formatters]
, будет иметь свою конфигурацию
указанный в разделе под названием [formatter_form01]
.Корневой регистратор
конфигурация должна быть указана в разделе с именем [logger_root]
.
Примечание
API fileConfig ()
старше, чем API dictConfig ()
, и
не предоставляют функциональные возможности для покрытия определенных аспектов ведения журнала. Например,
вы не можете настроить Фильтр
объектов, которые предусматривают
фильтрация сообщений за пределами простых целочисленных уровней с использованием fileConfig ()
.
Если вам нужно иметь экземпляры Filter
в вашем журнале
конфигурации, вам нужно будет использовать dictConfig ()
.Обратите внимание, что будущее
усовершенствования функциональности конфигурации будут добавлены к dictConfig ()
, поэтому стоит подумать о переходе на эту более новую
API, когда это удобно.
Примеры этих разделов в файле приведены ниже.
[регистраторы] ключи = корень, log02, log03, log04, log05, log06, log07 [обработчики] ключи = рука01, рука02, рука03, рука04, рука05, рука06, рука07, рука08, рука09 [форматировщики] ключи = form01, form02, form03, form04, form05, form06, form07, form08, form09
Корневой регистратор должен указывать уровень и список обработчиков.Пример Раздел корневого регистратора приведен ниже.
[каталог-журнала] level = NOTSET обработчики = hand01
Запись уровня
может быть одной из ОТЛАДКА, ИНФОРМАЦИЯ, ПРЕДУПРЕЖДЕНИЕ, ОШИБКА, КРИТИЧЕСКАЯ
или NOTSET
. Только для корневого регистратора NOTSET
означает, что все сообщения будут
зарегистрирован. Значения уровня eval ()
используются в контексте регистрации
пространство имен пакета.
Обработчики Запись
представляет собой список имен обработчиков, разделенных запятыми, которые должны
появляются в разделе [обработчики]
.Эти имена должны появиться в [обработчики]
раздел и имеют соответствующие разделы в конфигурации
файл.
Для регистраторов, отличных от корневого регистратора, требуется некоторая дополнительная информация. Это иллюстрируется следующим примером.
[logger_parser] level = DEBUG обработчики = hand01 распространять = 1 qualname = compiler.parser
Обработчики и уровня
записи интерпретируются как для корневого регистратора,
за исключением того, что если уровень регистратора без полномочий root указан как NOTSET
, система
консультируется с регистраторами выше по иерархии, чтобы определить эффективный уровень
регистратор.Запись распространить
установлена в 1, чтобы указать, что сообщения должны
распространяются на обработчики выше по иерархии регистратора от этого регистратора, или от 0 до
указывают, что сообщения , а не , передаются обработчикам вверх по иерархии. В qualname
entry - это имя иерархического канала регистратора, то есть
произнесите имя, используемое приложением для получения регистратора.
Примеры разделов, которые определяют конфигурацию обработчика, представлены ниже.
[handler_hand01] class = StreamHandler level = NOTSET formatter = form01 args = (sys.stdout,)
Запись класса
указывает класс обработчика (как определено функцией eval ()
в пространстве имен пакета logging
). Уровень
интерпретируется как
loggers, а NOTSET
означает «регистрировать все».
Модуль форматирования Запись
указывает ключевое имя модуля форматирования для этого
обработчик. Если пусто, используется форматтер по умолчанию ( logging._defaultFormatter
).
Если имя указано, оно должно появиться в разделе [форматировщики]
и иметь
соответствующий раздел в конфигурационном файле.
Запись args
, когда eval ()
используется в контексте регистрации
пространство имен пакета - это список аргументов конструктора для обработчика
класс. Обратитесь к конструкторам соответствующих обработчиков или к примерам
ниже, чтобы увидеть, как построены типичные записи. Если не указан, по умолчанию
к ()
.
Необязательная запись kwargs
, когда eval ()
используется в контексте регистрирует пространство имен пакета
, является ключевым словом аргумент dict для конструктора
для класса обработчика.Если не указан, по умолчанию используется значение {}
.
[handler_hand02] class = FileHandler level = DEBUG formatter = form02 args = ('python.log', 'ш') [handler_hand03] класс = обработчики.SocketHandler level = ИНФОРМАЦИЯ formatter = form03 args = ('localhost', обработчики.DEFAULT_TCP_LOGGING_PORT) [handler_hand04] class = handlers.DatagramHandler level = WARN formatter = form04 args = ('localhost', обработчики.DEFAULT_UDP_LOGGING_PORT) [handler_hand05] класс = обработчики.SysLogHandler уровень = ОШИБКА formatter = form05 args = (('localhost', обработчики.SYSLOG_UDP_PORT), обработчики.SysLogHandler.LOG_USER) [handler_hand06] class = handlers.NTEventLogHandler уровень = КРИТИЧЕСКИЙ formatter = form06 args = ('Приложение Python', '', 'Приложение') [handler_hand07] класс = обработчики.SMTPHandler level = WARN formatter = form07 args = ('localhost', 'from @ abc', ['user1 @ abc', 'user2 @ xyz'], 'Тема регистратора') kwargs = {'тайм-аут': 10.0} [handler_hand08] class = handlers.MemoryHandler level = NOTSET formatter = form08 цель = args = (10; ОШИБКА) [handler_hand09] class = handlers.HTTPHandler level = NOTSET formatter = form09 args = ('локальный: 9022', '/ журнал', 'ПОЛУЧИТЬ') kwargs = {'secure': True}
Разделы, определяющие конфигурацию средства форматирования, типичны следующим образом.
[formatter_form01] format = F1% (asctime) s% (имя уровня) s% (сообщение) s datefmt = class = logging.Formatter
Формат Запись
- это строка общего формата, а запись datefmt
-
строка формата даты / времени, совместимого с strftime ()
. Если пусто,
пакет заменяет что-то, что почти эквивалентно указанию даты
строка формата '% Y-% m-% d% H:% M:% S'
. Этот формат также определяет миллисекунды,
которые добавляются к результату использования указанной выше строки формата с запятой
разделитель.Пример времени в этом формате: 2003-01-23 00: 29: 50,411
.
Запись class
является необязательной. Он указывает имя класса средства форматирования.
(в виде модуля и имени класса, разделенных точками). Этот параметр полезен для создания экземпляра Formatter
подкласс. Подклассы Formatter
может представлять трассировку исключений в развернутом или
сжатый формат.
Примечание
Из-за использования eval ()
, как описано выше, есть
потенциальные риски безопасности, возникающие в результате использования listen ()
для отправки
и получать конфигурации через сокеты.Риски ограничены тем, где
несколько пользователей без взаимного доверия запускают код на одной машине; увидеть
Для получения дополнительной информации обратитесь к документации по listen ()
.
См. Также
- Модуль
ведение журнала
Справочник по API для модуля регистрации.
- Модуль
logging.handlers
Полезные обработчики, включенные в модуль регистрации.
python - Установить значения уровня в MultiIndex
Как я могу установить значения уровня серии, используя словарь для замены значений или просто список значений длины серии?
Вот образец DataFrame:
сектор from_country to_country 0
0 Текстиль FRA AUS 47.502096
1 Текстиль FRA США 431.8
2 Текстиль GBR AUS 83.500590
3 Текстиль GBR США 324,836158
4 Дерево FRA AUS 27.515607
5 Дерево FRA США 276.501148
6 Дерево GBR AUS 1.406096
7 Вуд GBR США 8.9
Теперь установите индекс:
df = df.set_index (['сектор', 'from_country', 'to_country']). Squeeze ()
Например, если бы я хотел изменить на основе следующих пар ключ / значение:
В [69]: replace_dict = {'FRA': 'Франция', 'GBR': 'Великобритания'}
В [70]: new_val = [replace_dict [x] для x в df.index.get_level_values ('from_country')]
Я бы хотел, чтобы результат выглядел так:
В [68]: df.index.set_level_values (new_vals, level = 'from_country')
Из [68]:
сектор from_country to_country
Текстиль Франция AUS 47.502096
США 431.8
Великобритания AUS 83.500590
США 324,836158
Древесина Франция AUS 27.515607
США 276.501148
Великобритания AUS 1.406096
США 8.9
Сейчас я делаю это, но мне это кажется довольно глупым:
def set_index_values (df_or_series, new_values, level):
"" "
Замените уровень MultiIndex `level` на` new_values`
new_values должен иметь ту же длину, что и df_or_series.
"" "
уровни = df_or_series.index.names
retval = df_or_series.reset_index (уровень)
retval [уровень] = новые_значения
retval = retval.set_index (уровень, append = True) .reorder_levels (уровни) .sortlevel (). squeeze ()
вернуть retval
Набор уровнейStabila | Acme Tools
О наборе уровней Stabila
Как производитель электроинструментов и ручных инструментов на протяжении последнего столетия, Stabila была брендом, которому профессионалы и мастера снова и снова доверяют. Начиная с уровня Stabila 1889 и заканчивая текущими продуктами, у них есть надежный послужной список, который говорит сам за себя.
Stabila уделяет первоочередное внимание качеству изготовления и долговечности, но также стремится к тому, чтобы постоянно изобретать новые и лучшие способы получить работу.
Набор Stabila Level Set не является исключением из правил. Наличие высококачественного набора уровней может иметь решающее значение, когда дело доходит до управления временем, точности и аккуратности.
Типы наборов уровней Stabila
Хотя для некоторых работ могут потребоваться определенные типы уровней, многие профессионалы предпочитают вкладывать средства в набор уровней. Поскольку эти наборы содержат несколько уровней, работникам, которые знают, что они понадобятся им для выполнения нескольких работ, не нужно беспокоиться о совершении нескольких покупок.
В своих наборах уровней Stabila делает упор на универсальность, долговечность и точность.Они не только включают в себя многие из тех же функций, которые вы видите на отдельных уровнях, такие как усиленная ребрами рама, но и долговечны. Некоторые наборы уровней Stabila даже включают в себя футляр для переноски, чтобы вы могли защитить свои уровни, когда вы их не используете, и облегчить их транспортировку.
Чтобы упростить управление этими высокопрочными наборами, рукоятки сконструированы так, чтобы их было удобно использовать. С помощью набора для установки уровня вы также можете поддерживать нормальное положение предметов и сохранять точность измерений.
Зачем покупать набор уровней Stabila?
Если вам нужен набор уровней Stabila, уровень торпеды, магнитный уровень, уровень плиты, уровень коробки, другие типы уровней, у Stabila есть множество причин для покупки. Они не только часто используют сертифицированную точность уровня для своих наборов уровней, но также часто используют высокопрочные алюминиевые рамы для увеличения срока службы.
Когда дело доходит до повторной регулировки или переналадки, использование уровня Stabila на вашей рабочей поверхности дает множество преимуществ.Помимо бесплатной доставки, эти наборы уровней часто включают в себя съемные заглушки и, в некоторых случаях, акриловое стекло. Эти амортизирующие заглушки предотвращают скольжение и падение.
Когда вы закончите с набором уровня и усиленным уровнем, вы можете использовать большие металлические отверстия для рук, чтобы поднять его. Эти металлические отверстия для подвешивания могут пригодиться, если у вас ограниченное пространство для хранения вещей.
Auto-Set ™ Технические характеристики: | Литература: | |||
• Источник питания - 120/240 В переменного тока или 24 В постоянного тока (универсальный источник питания) | • Лист данных | |||
• Рабочая температура от -25 ° F (-32 ° C) до 160 ° F (71 ° C) | • Полный каталог продукции | |||
• Чувствительность - 0.5 Пико Фарад | (Дополнительную литературу см. В разделе Загрузки) | |||
• Выход - 1 набор контактов реле переключения без напряжения | ||||
• Отказоустойчивость - низкий или высокий уровень (по выбору) | Технический: | |||
• Калибровка - кнопка (с материалом или без материала) | • Руководство по продукту | |||
• Светодиодный дисплей - измеренные значения (закрытый, открытый, срабатывание) | ||||
• Светодиодный индикатор - обнаружение материала | Размеры продукта: | |||
• Временная задержка - от 0 до 60 секунд | ATS7V0FC - | |||
• Защитный экран - 3-7 / 8 дюймов (ATS7V0FC) | •.dwg (AutoCAD) .pdf | |||
12-1 / 16 дюйма (ATS70FC-300) | ||||
15-5 / 16 дюймов (ATS7V0FC-400) | ATS7V0FC-300 - | |||
• Зонды - нержавеющая сталь (от 3 дюймов до 33 футов) | •.dwg (AutoCAD) .pdf | |||
• Ввод кабелепровода - 3/4 дюйма NPT (2) | ||||
• Корпус - огнестойкий, нейлон, армированный стеклом | Сравните индикаторы уровня | |||
• Степень защиты - IP65, NEMA 4 | ||||
Одобрения: | ||||
• CSA, класс II, раздел 1, группы E, F и G (U.Южная и Канада) | ||||
• Доступны версии ATEX и CE | ||||
Номера деталей и аксессуары: | ||||
• ATS7V0FC ~ Автоматическая установка (стенки контейнера толщиной до 3 дюймов) | ||||
• ATS7V0FC-300 ~ Автоматическая установка (стенки контейнера толщиной от 3 до 11 дюймов) | ||||
• ATS7V0FC-400 ~ Автоматическая установка (стенки контейнера с 11 по 14.5 дюймов толщиной) | ||||
• Зонд из нержавеющей стали EX03 ~ 316 3–3 / 8 дюйма | ||||
• 8-дюймовый зонд из нержавеющей стали EX12 ~ 316 | ||||
• 20-дюймовый зонд из нержавеющей стали EX24 ~ 316 | ||||
• Зонд 32 дюйма из нержавеющей стали EX36 ~ 316 | ||||
• Зонд из нержавеющей стали EX48 ~ 316, 44 дюйма (концы с резьбой M / F) | ||||
• Провод зонда из нержавеющей стали WP ~ 304 | ||||
• Монтажная пластина SMP ~ (возможна нержавеющая сталь) | ||||
Найдите полный набор акриловых картин уровня 1 от Artist's Loft ™ в Michaels
Если вы начинающий художник, вам обязательно понравится этот полный набор для рисования акрилом.Он включает в себя все, от тюбиков и кистей до рисовальных ножей, палитры и многого другого. Краски на водной основе быстро сохнут, что делает их идеальными для самых разных техник._x000D_
_x000D_ Подробности: _x000D_
- _x000D_
- Включает различные цвета краски _x000D_
- 24 штуки _x000D_
- AP сертифицировано _x000D_
- Соответствует ASTM D 4236 _x000D_
- _x000D_
- 12 тюбиков с акриловой краской (0.7 эт. унций / 21 мл каждая) _x000D_
- 4 синтетические кисти с длинной ручкой (две плоские и круглые №4, две плоские и круглые №6) _x000D_
- 2 полотна (8 "x 10", 20,3 x 25,4 см) _x000D_
- 2 средние банки (1 средняя глянцевая и 1 моделирующая паста) (1,3 жидких унции / 40 мл каждая) _x000D_
- 2 пластиковых малярных ножа _x000D_
- 1 поддон _x000D_
- 1 карандаш _x000D_