Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Design overview

Boost , Chapter 1. Boost.Log v2 , Chapter 1. Boost.Log v2

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

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

Библиотека состоит из трех основных слоев: слоя сбора данных журнала, слоя обработки собранных данных и центрального узла, который соединяет два предыдущих слоя. Дизайн представлен на рисунке ниже.

Design

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

Logging sources

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

Вообще говоря, библиотека не требует использования регистраторов для записи журналов. Более общий термин «источник журнала» обозначает объект, который инициирует ведение журнала путем построения записи журнала. Другие источники журналов могут включать захваченный вывод консоли приложения для ребенка или данные, полученные из сети. Тем не менее, лесозаготовители являются наиболее распространенным типом источников журналов.

Attributes and attribute values

Чтобы инициировать логирование, источник журнала должен передать все данные, связанные с записью журнала, в ядро регистрации. Эти данные или, точнее, логика получения данных представлены набором именованных атрибутов. Каждый атрибут представляет собой функцию, результат которой называется «значением атрибута» и фактически обрабатывается на последующих стадиях. Примером атрибута является функция, возвращающая текущее время. Его результат — конкретная точка времени — является значением атрибута.

Существует три вида наборов атрибутов:

  • глобальный
  • специфический
  • источникоспецифичный

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

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

Logging core and filtering

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

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

Sinks and formatting

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

Как вы могли заметить на рисунке выше, раковины состоят из двух частей: фронтенда и бэкэнда. Это разделение сделано для того, чтобы извлечь общую функциональность поглотителей, такую как фильтрация, форматирование и синхронизация потоков, в отдельные объекты (фронтенды). Фронтенды Sink предоставляются библиотекой, скорее всего, пользователям не придется их повторно внедрять. Бэкенды, с другой стороны, являются одним из наиболее вероятных мест для расширения библиотеки. Это раковины, которые делают фактическую обработку записей журнала. Может быть раковина, которая хранит записи журнала в файл; может быть раковина, которая отправляет записи журнала по сети в удаленный узел обработки журнала; может быть вышеупомянутая раковина, которая помещает сообщения записи в уведомления подсказки инструмента - вы называете его. Наиболее часто используемые раковины уже предоставлены библиотекой.

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


PrevUpHomeNext

Статья Design overview раздела Chapter 1. Boost.Log v2 Chapter 1. Boost.Log v2 может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Boost.Log v2 ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:08:05/0.030297994613647/1