![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Wide character loggingBoost , Chapter 1. Boost.Log v2 , Tutorial
|
![]() | Tip |
---|---|
Значения атрибутов также могут содержать широкие строки. Как и сообщения записи журнала, эти строки будут преобразованы с помощью встроенной локализации в кодирование целевого символа. |
Здесь не хватает одного определения типа<severity_level
>. Тип - это просто перечисление, но если мы хотим поддерживать его форматирование как для узких, так и для широких поглотителей символов, его потоковый оператор должен быть шаблоном. Это может быть полезно, если мы создаем несколько раковин с различными типами символов.
enum severity_level { normal, notification, warning, error, critical }; template< typename CharT, typename TraitsT > inline std::basic_ostream< CharT, TraitsT >& operator<< ( std::basic_ostream< CharT, TraitsT >& strm, severity_level lvl) { static const char* const str[] = { "normal", "notification", "warning", "error", "critical" }; if (static_cast< std::size_t >(lvl) < (sizeof(str) / sizeof(*str))) strm << str[lvl]; else strm << static_cast< int >(lvl); return strm; }
Теперь мы можем издавать записи журналов. Мы можем использовать регистраторы с префиксом<w
>в их именах для составления широких сообщений символов.
void test_narrow_char_logging() { // Narrow character logging still works src::logger lg; BOOST_LOG(lg) << "Hello, World! This is a narrow character message."; } void test_wide_char_logging() { src::wlogger lg; BOOST_LOG(lg) << L"Hello, World! This is a wide character message."; // National characters are also supported const wchar_t national_chars[] = { 0x041f, 0x0440, 0x0438, 0x0432, 0x0435, 0x0442, L',', L' ', 0x043c, 0x0438, 0x0440, L'!', 0 }; BOOST_LOG(lg) << national_chars; // Now, let's try logging with severity src::wseverity_logger< severity_level > slg; BOOST_LOG_SEV(slg, normal) << L"A normal severity message, will not pass to the file"; BOOST_LOG_SEV(slg, warning) << L"A warning severity message, will pass to the file"; BOOST_LOG_SEV(slg, error) << L"An error severity message, will pass to the file"; }
Как видите, широкая композиция сообщений символов похожа на узкую вырубку. Обратите внимание, что вы можете использовать как узкую, так и широкую запись символов одновременно; все записи будут обрабатываться нашей раковиной. Полный код этого примера можно найти здесь.
Следует отметить, что некоторые раковины (в основном, Windows-специфические) позволяют указать тип целевого символа. Когда в регистрационных записях ожидаются национальные символы, всегда следует использовать<wchar_t
>в качестве целевого типа символов в этих случаях, потому что раковина будет использовать широкий API ОС символов для обработки регистрационных записей. В этом случае все узкие строки символов будут расширены с использованием локализации, пропитанной раковиной при выполнении форматирования.
Статья Wide character logging раздела Chapter 1. Boost.Log v2 Tutorial может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
реклама |