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

Trivial logging with filters

Boost , Chapter 1. Boost.Log v2 , Tutorial

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

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

void init()
{
    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );
}
int main(int, char*[])
{
    init();
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
    return 0;
}

Полный код.

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

[Important]Important

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

Несколько слов нужно сказать о выражении установки фильтра. Поскольку мы создаем глобальный фильтр, мы должны приобрести ядродля регистрации. Вот что делает<logging::core::get()>— возвращает указатель на ядро синглтона. Метод<set_filter>лесозаготовительного ядра задает глобальную функцию фильтрации.

Фильтр в этом примере построен какBoost. Феникслямбда-выражение. В нашем случае это выражение состоит из единственного логического предиката, левый аргумент которого является заполнителем, описывающим проверяемый атрибут, а правый аргумент — величиной, против которой нужно проверить. Ключевое слово<severity>является заполнителем, предоставляемым библиотекой. Этот заполнитель определяет значение атрибута строгости в выражениях шаблона; ожидается, что это значение будет иметь имя «Severity» и тип<severity_level>. Этот атрибут автоматически предоставляется библиотекой в случае тривиальной регистрации; пользователю нужно только указать его значение в заявлениях о регистрации. Заполнитель вместе с оператором заказа создает функциональный объект, который будет вызван ядром регистрации для фильтрации записей журнала. В результате только лог-записи с уровнем тяжести не ниже<info>пройдут фильтр и попадут на консоль.

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


PrevUpHomeNext

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




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



:: Главная :: Tutorial ::


реклама


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

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