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

Creating loggers and writing logs

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
Dedicated logger objects

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

src::logger lg;
[Note]Note

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

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

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

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

Global logger objects

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

BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(my_logger, src::logger_mt)

Здесь<my_logger>- это определяемое пользователем имя тега, которое будет использоваться позже для извлечения экземпляра регистратора, и<logger_mt>- тип регистратора. Любой тип регистратора, предоставленный библиотекой или определенный пользователем, может участвовать в таком заявлении. Однако, поскольку у регистратора будет один экземпляр, вы, как правило, захотите использовать регистраторы с защитой потока в многопоточном приложении в качестве глобальных.

[Tip]Tip

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

Позже вы можете приобрести лесоруб, как это:

src::logger_mt& lg = my_logger::get();

<lg>будет относиться к одному и единственному экземпляру регистратора на протяжении всей заявки, даже если приложение состоит из нескольких модулей. Сама функция<get>безопасна для потоков, поэтому нет необходимости в дополнительной синхронизации вокруг нее.

Writing logs

Независимо от того, какой регистратор вы используете (член класса или глобальный, безвредный или нет), чтобы записать запись журнала в регистратор, вы можете написать что-то вроде этого:

logging::record rec = lg.open_record();
if (rec)
{
    logging::record_ostream strm(rec);
    strm << "Hello, World!";
    strm.flush();
    lg.push_record(boost::move(rec));
}

Здесь вызов функции<open_record>определяет, будет ли построенная запись потребляться по меньшей мере одной раковиной. На этом этапе применяется фильтрация. Если запись потребляется, функция возвращает действительный объект записи, и можно заполнить строку сообщения записи. После этого запись может быть завершена с вызовом<push_record>.

Конечно, вышеупомянутый синтаксис можно легко обернуть в макрос и, по сути, пользователям рекомендуется писать свои собственные макросы вместо непосредственного использования интерфейса регистратора C++. Запись выше может быть написана следующим образом:

BOOST_LOG(lg) << "Hello, World!";

Выглядит немного короче, не так ли? Макро<BOOST_LOG>, наряду с другими подобными, определяется библиотекой. Он автоматически обеспечивает STL-подобный поток для форматирования сообщения с обычными выражениями вставки. После написания, компилирования и выполнения кода вы сможете увидеть запись «Hello, World!» в файле «sample.log». Полный текст этого разделавы найдете здесь.


PrevUpHomeNext

Статья Creating loggers and writing logs раздела Chapter 1. Boost.Log v2 Tutorial может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

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