Добавлены новые инструменты для межпроцессной регистрации на локальной машине. Реализация включает в себя оберткуимени ресурса,очередь сообщений между процессамиифон раковины. Новая функциональность является необязательной и может быть отключена путем определения<BOOST_LOG_WITHOUT_IPC>Макро на момент создания библиотеки. Благодаря Lingxi Ли для начального пластыря.
Добавлен новый декоратор персонажа под названием<max_size_decor>. Новый декоратор позволяет ограничить выход своего принятого форматтера до заданной длины. Это может быть полезно с новой межпроцессной раковиной.
Баг фиксирует:
Исправлено, что регистрирующие потоки могут сохранять настройки форматирования в различных записях журналов.#12178
Поддержка<boost::basic_string_ref>и его специализаций обесценена; пользователям предлагается перейти на<boost::basic_string_view>, который теперь поддерживается для вывода на потоки форматирования. Поддержка<boost::basic_string_ref>будет удалена в будущих выпусках.
Добавлена поддержка ограничения количества сохраненных лог-файлов в целевом каталоге коллектора файлов. Предел может быть указан в<max_files>поименованном параметре для вызовов<make_collector>или<add_file_log>или в качестве параметра «MaxFiles» для раковины в файле настроек. Спасибо Эриху Кину за пластырь.#8746
Баг фиксирует:
Исправлены различные проблемы компиляции для Windows CE.
Проблемы с компиляцией на Solaris.
В некоторых случаях добавлен обходной путь для MSVC-10 и 11, генерирующих неработающий код для форматтеров.#12025
В Windows макрос конфигурации<BOOST_LOG_USE_WINNT6_API>больше не используется библиотекой. Целевая версия Windows должна быть сконфигурирована путем определения макроса<BOOST_USE_WINAPI_VERSION>для желаемой версии WinAPI (например, 0x0501 для Windows XP). Этот макрос используется во многих библиотеках Boost, кроме Boost. Лог.
Целевая версия Windows по умолчанию теперь Vista на компиляторах с достаточно новыми Windows SDK и XP на других. По умолчанию больше не выбирают Boost. Лог, но общим подмодулем WinAPI, используемым различными библиотеками Boost.
Изменен внутренний тип mutex в реализации потоково-безопасной очереди, который используется в асинхронных фронтендах раковины с политикой<unbounded_fifo_queue>. Обновленная очередь улучшила производительность в случае тяжелых нитей (сотни и тысячи логгерных нитей) на POSIX-совместимых системах.
Баг фиксирует:
Фиксированная компиляция для Android с помощью Google NDK.#11559
Фиксированная компиляция некоторых записей журналирования, где первый объект, подлежащий вводу в поток, не поддерживается напрямую<formatting_ostream>.#11549
Добавлен обходной путь для Solaris Studio 12.4, который должен зафиксировать компиляцию<formatting_ostream>.#11545
Фиксированная компиляция, когда нативный<wchar_t>тип отключен. Добавлена записка о разочаровании вконфигурациюраздел#11541.
Исправлен экспорт символов из библиотеки<boost_log_setup>на POSIX-подобных системах.
Добавлен обходной путь для генерации неправильных имен файлов втекстовом файле раковины backend, когда имя файла содержит заполнители даты/времени.#11691
В системах с поддержкойсимвольной видимости(например, Linux) библиотека теперь построена со всеми скрытыми внутренними символами. Символы API по-прежнему имеют видимость по умолчанию, поэтому это не должно влиять на связь с библиотекой.
Переломные изменения:Библиотека была портирована наBoost.TypeIndexдля основного инструмента управления информацией типа. Это улучшило совместимость библиотеки со скрытым режимом видимости символов на некоторых компиляторах. Это затронуло следующие публичные интерфейсы:
<invalid_type>исключения, выброшенные библиотекой, теперь прилагаются<typeindex::type_index>в качестве описания типа правонарушения. Этот тип был ранее идентифицирован<type_info_wrapper>.
Boost.Exception<type_info_info>Информация об ошибках теперь содержит<typeindex::type_index>вместо<type_info_wrapper>. Это информация об ошибке, которую можно использовать для получения информации о типе из<invalid_type>исключений.
<attribute_value::get_type()>возвращается<typeindex::type_index>вместо<type_info_wrapper>. Если<attribute_value>объект пуст, то возвращенный<type_index>построен по умолчанию (т.е. относится к<void>типу). Реализации значений атрибутов, определяемых пользователем, должны быть аналогичным образом изменены (виртуальный метод<attribute_value::impl::get_type()>теперь также возвращается<typeindex::type_index>).
<type_info_wrapper>компонент был амортизирован и будет удален в будущих выпусках.Boost.TypeIndexрекомендуется в качестве замены.
Сняты ранее обесцененные заголовки:<boost/log/utility/intrusive_ref_counter.hpp>,<boost/log/utility/explicit_operator_bool.hpp>,<boost/log/utility/empty_deleter.hpp>.
Добавлена поддержка построения библиотеки для OpenBSD.#11446
Улучшена внутренняя реализация примитивной синхронизации событий, используемой для асинхронной регистрации. Обновленная реализация опирается наBoost.Atomicдля атомных операций, что обеспечивает лучшую переносимость. В Linux реализация использует непосредственно футексы.#11398
Изменился формат дат, создаваемых стандартным форматировщиком, построенным из строк (например, при инициализации библиотеки из файла конфигурации). Новый формат отображает месяцы в виде цифр вместо сокращенных имен. Это позволяет упростить порядок записи журнала при постобработке файлов журнала.#8839
Баг фиксирует:
В некоторых случаях фиксируется неправильное поведение<attribute_value_set::insert()>и<attribute_value_set>конструктора. Вставленные элементы могли сделать некоторые ранее вставленные элементы недоступными. Конструктор из<attribute_set>s мог оставить некоторые значения атрибутов, полученные из атрибутов, не находимыми.#11190
Добавлены недостающие функции шаблона экспорта.#11495
Fixed thread id форматирование. Идентификаторы потоков могут быть представлены в виде нулей на платформе big-endian. Также в выходе были потеряны нижние 4 бита идентификаторов.
Fixed process id форматирование. Процессные идентификаторы могли иметь неуместные нули наполнителя.#10926
Fixed build failure на GNU Hurd.
Исправлено неправильное поведениеисходного кода текстового файлав случае, если свободное пространство в файловой системе исчерпано. Сливная раковина больше не будет создавать много пустых файлов в попытке восстановить.#11016
Неправильное поведение<attribute_set::insert()>в некоторых случаях. Вставленные элементы могли сделать некоторые ранее вставленные элементы недоступными.#11106
Фиксированное неправильное поведение<attribute_value_set::size()>, если в набор вставлено большое количество значений атрибутов.#11148
Добавлены новые флаги форматов «%c», «%C» и «%F» кназванному форматировщику области применения. Новые флаги позволяют помещать имена функций и имена исходных файлов названных областей в отформатированные строки.#9263
Добавлена поддержка неполных и пустых маркеров кназванному форматировщику масштаба. Маркеры могут использоваться для настройки представления списка объема, когда список пуст или ограничен поименованным параметром<depth>.#9123
Презентация по умолчанию для неполных списков названных областей применения изменилась. В предыдущих выпусках неполный маркер включал следящий делимитер, например «scope1<-scope2<-...». Из этого выпуска следящий разграничитель опущен, поэтому в том же случае результатом форматирования будет: «scope1<-scope2...». (обратите внимание на недостающий след «<-»).
Добавлен заголовок поддержки<std::regex>. Если<boost/log/support/std_regex.hpp>включен, можно использовать выражения<std::regex>сфильтрами соответствия строк.
По умолчанию Boost. Лог используетBoost.Regexвнутренне как бэкэнд регулярных выражений.Boost.Xpressiveиспользовался в предыдущих выпусках. Этот бэкэнд используется для реализации фильтров соответствия строкам, парсированных из строк или настроек. ИспользованиеBoost.Regexпо умолчанию приводит к меньшим исполняемым файлам, а также лучшей производительности во время выполнения.
Добавлены макросы конфигурации сборки для выбора regex backend.<BOOST_LOG_USE_STD_REGEX>,<BOOST_LOG_USE_BOOST_REGEX>или<BOOST_LOG_USE_BOOST_XPRESSIVE>при увеличении. Время создания журнала пользователь может выбрать, какая реализация regex будет использоваться библиотекой внутри для фильтров соответствия строкам, парсированных из строк и настроек. Обратите внимание, что этот выбор не влияет нафильтры соответствия строк в выражениях.
Баг фиксирует:
Исправлено<dump>выход манипулятора на процессорах с поддержкой AVX2 (например, Intel Haswell).
Добавлен обходной путь для ошибки MSVC, которая вызвала<add_value>Манипулятор производит значения атрибутов мусора при использовании с немедленными целочисленными константами.#9320
Добавлен новый макрос конфигурации<BOOST_LOG_WITHOUT_DEFAULT_FACTORIES>. Определив этот макрос, пользователь может отключить компиляцию фабрик фильтров и форматеров по умолчанию, используемых парсерами настроек. Это может существенно уменьшить двоичные размеры, сохраняя при этом поддержку парсеров настроек. Обратите внимание, что при определении этого макроса пользователю придется зарегистрироватьвсеатрибуты в библиотеке.
Переписал некоторые парсеры, чтобы уменьшить компилируемый двоичный размер. Переписанные парсеры более надежны в обнаружении неоднозначного и неправильного ввода.
Заголовок<boost/log/utility/intrusive_ref_counter.hpp>является устаревшим и будет удален в будущих выпусках. Его содержимое было переработано и перемещено вBoost.SmartPtr, как<boost/smart_ptr/intrusive_ref_counter.hpp>.
Заголовок<boost/log/utility/explicit_operator_bool.hpp>является устаревшим и будет удален в будущих выпусках. Его содержание было перемещено вBoost.Utility, как<boost/utility/explicit_operator_bool.hpp>.
Заголовок<boost/log/utility/empty_deleter.hpp>является устаревшим и будет удален в будущих выпусках. Его содержание было перенесено наBoost.Utility, как<boost/utility/empty_deleter.hpp>.
Баг фиксирует:
Фиксированный<timer>атрибут, генерирующий неправильные показания времени в Windows при использовании API<QueryPerformanceCounter>.
Исправлена ошибка в парсере фильтров, которая помешала использовать парсированные фильтры с некоторыми атрибутами. Например, парсированные фильтры не работали со значением атрибута, типизированного строкой, если значение сравнивалось с числовым операндом.
Фиксированные id-образования потоков между по умолчанию раковиной и формататорами.
Фиксированный разбор значений параметров RotationTimePoint из настроек, когда точка времени включает только время суток (т.е. ежедневное вращение).
<basic_formatting_ostream>больше не происходит от<std::basic_ostream>, а скорее близко реализовывает свой интерфейс и интерфейс базовых классов. Это решает проблемы с перегрузкой<operator<<>для<basic_formatting_ostream>и определяемых пользователем типов. Это нарушит код пользователя, если он будет полагаться на наследование от стандартных типов потоков (таких как передача<basic_formatting_ostream>объекта в качестве аргумента функции, принимающей<std::basic_ostream>). Пожалуйста, используйте функцию<stream()>для доступа к стандартному потоку. Это изменение будет, а ненарушать код, который выводит определяемые пользователем типы в поток<basic_formatting_ostream>, в то время как для стандартных типов потоков существуют только<operator<<>перегрузки - код будет компилировать и использовать стандартные перегрузки оператора, как и раньше.
Общие изменения:
Удалено использование устаревших макросовBoost.Config.
Улучшена система строительства. В Windows присутствие компилятора сообщений теперь обнаруживается автоматически, а поддержка журнала событий включается только при наличии инструмента.
Фиксированная компиляция, когда определен макрос конфигурации<BOOST_LOG_USE_COMPILER_TLS>.
Фиксированная компиляция некоторых видов использования<add_value>манипулятор с MSVC.
Добавлен новый<dump>выходной манипулятор для печати двоичных данных.
Библиотека теперь совместима с Boost 1.53 или новее.Файловая системаv2 больше не поддерживается.
Библиотека теперь не вводит отдельные ядра для регистрации различных типов символов. Многие другие компоненты библиотеки также стали агностиками. Приложение теперь может использовать регистраторы различных типов символов с общим ядром регистрации. Библиотека выполняет преобразование кода символов по мере необходимости.Boost.Localeможет использоваться для построения локальных объектов для правильного преобразования кодирования.
Макрос конфигурации<BOOST_LOG_NO_COMPILER_TLS>заменен на<BOOST_LOG_USE_COMPILER_TLS>с противоположным значением. Поддержка встроенных компиляторов для TLS теперь отключена по умолчанию.
Добавлены макросы конфигурации<BOOST_LOG_WITHOUT_DEBUG_OUTPUT>,<BOOST_LOG_WITHOUT_EVENT_LOG>и<BOOST_LOG_WITHOUT_SYSLOG>.<BOOST_LOG_NO_SETTINGS_PARSERS_SUPPORT>макрос переименован в<BOOST_LOG_WITHOUT_SETTINGS_PARSERS>. Новые макросы позволяют выборочно отключать поддержку соответствующих панелей.
Библиотека теперь используетBoost.XpressiveвместоBoost.Regexвнутренне, что делает ненужным создание последнего для использования библиотеки.Boost.Regexпо-прежнему поддерживается на стороне пользователя.
Создан некоторый внутренний код для обнаружения доступности API Windows NT6 во время выполнения, если он явно не включен макросом<BOOST_LOG_USE_WINNT6_API>. Код, скомпилированный без макроопределения, все равно сможет работать на NT5, но при запуске на NT6 он будет более эффективным. При макроопределении полученный код не будет работать на NT5, но будет немного эффективнее на NT6, чем без макроса.
Добавлена концепция раковины по умолчанию. По умолчанию раковина используется, когда нет раковин, настроенных в ядре для рубки. Поглотитель синхронен и безвреден, не требует конфигурации и перекрывается любыми поглотителями, настроенными в ядре пользователем. По умолчанию раковина будет писать лог-сообщения на консоль, готовясь с меткой времени, идентификатором потока и уровнем серьезности.
Тривиальная регистрация больше не подразумевает инициализации библиотеки. Вместо этого раковина по умолчанию используется для отображения сообщений журнала, если библиотека не настроена иначе. Теперь можно использовать как тривиальные, так и продвинутые лесозаготовки.
Значения атрибутов теперь можно добавлять в записи журналов после фильтрации. Такие значения не участвуют в фильтрации, но могут использоваться формататорами и мойками. Сообщение записи журнала теперь является одним из таких значений атрибутов, оно больше не доступно напрямую из интерфейса записи журнала.
Материалы и раковины больше не работают на записях журнала, а скорее на<record_view>с. Записи теперь перемещаются от момента, когда они перемещаются в ядро для дальнейшей обработки. Это делается для того, чтобы исключить возможность небезопасной модификации записи после нажатия на ядро. Как следствие, лог-записи больше нельзя копировать, разрешено только перемещение. Просмотр записей может быть скопирован и перемещен; копирование является мелкой операцией.
В настоящее время реализация обеспечивает несколько потоковых манипуляторов. В частности,<to_log>Манипулятор позволяет настраивать форматирование для конкретных типов и атрибутов без изменения обычного оператора потоковой передачи. Кроме того,<add_value>Манипулятор может использоваться при регистрации выражений для прикрепления значений атрибутов к записи.
Сделал много улучшений для ускорения компиляции кода.
Атрибуты:
Изменился интерфейс и способ обработки значений атрибутов. Ценность теперь является оберткой сутенера вокруг держателя стоимости. Класс<attribute_value>в различных компонентах библиотеки больше не указывается с<shared_ptr>, а вместо этого обрабатывается значением. Это позволило упростить обработку атрибутов в простых случаях.
Подобно значениям атрибутов, интерфейс атрибутов был переработан в стиле pimpl. Все атрибуты теперь происходят из базового класса<attribute>, который содержит ссылку на реализацию. Все атрибуты теперь должны быть созданы по значению, а не завернуты в<shared_ptr>пользователем, что делает код более лаконичным.
Добавлена поддержка литья атрибутов из базового класса<attribute>в фактический тип атрибута. Это может быть полезно, когда бетонная фабрика атрибутов предоставляет дополнительные интерфейсы.
Атрибутное значение больше не имеет метода<get>. Используйте функцию<extract>в качестве замены.
Изменился ключевой тип наборов атрибутов и набор значений атрибутов. Новый тип ключей называется<attribute_name>. Он построен из строк, поэтому в большинстве случаев пользователям не нужно будет менять код. См.здесьдля получения дополнительной информации.
Вид значений атрибутов был переименован в набор значений атрибутов. Контейнер теперь поддерживает добавление дополнительных значений атрибутов после сборки.
Наборы атрибутов и наборы значений атрибутов больше не поддерживают порядок элементов. Хотя это не было указано явно, контейнеры были заказаны как ассоциативные контейнеры. Теперь порядок элементов не уточняется. Реализация была переработана для ускорения вставки / удаления атрибутов, а также поиска атрибутов и построения значений. Недостатком является то, что в некоторых случаях объем памяти может увеличиваться.
Наборы атрибутов теперь используют небольшие пулы памяти для ускорения ввода/удаления элементов.
Заголовок<scoped_attribute.hpp>переместился из<utility>в<attributes>каталог. Заголовок<attribute_value_extractor.hpp>в<utility>был заменен заголовками<boost/log/attributes/value_extraction.hpp>и<boost/log/attributes/value_visitation.hpp>в каталоге<attributes>. Два новых заголовка определяют пересмотренный API извлечения значений атрибутов и посещения, соответственно. Подробнее см.здесь.
Упрощены макросы атрибута Scoped. Аргументы конструктора атрибутов указываются рядом с типом атрибута, и тип тега больше не требуется.
Атрибут<current_thread_id>больше не использует<boost::thread::id>тип для идентификации потока. Вместо этого используется внутренний тип, который доступен как<current_thread_id::value_type>. Новые идентификаторы потоков взяты из базового API ОС и, таким образом, более тесно коррелируют с тем, что может отображаться отладчиками и инструментами системной диагностики.
<current_process_name>добавлен атрибут. Атрибут генерирует строку с исполняемым именем текущего процесса.
<functor><function>[<functor>] [<functor>] [[]] [[]] [[]]] [[]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]]] [[]] [[]] Функция генератора была переименована из<make_functor_attr>в<make_function>. Заголовок был переименован из<functor.hpp>в<function.hpp>.
Источники лесозаготовок:
Исправлены проблемы компиляции с функцией обработки регистратора исключений.
Глобальное хранилище журналов стало более удобным для настроек, в которых скрытая видимость устанавливается по умолчанию.
Добавлены макросы для отдельной глобальной лесозаготовительной декларации и определения. Старые макросы были переименованы, чтобы лучше отражать их эффект<BOOST_LOG_DECLARE_GLOBAL_LOGGER_INIT>до<BOOST_LOG_INLINE_GLOBAL_LOGGER_INIT>,<BOOST_LOG_DECLARE_GLOBAL_LOGGER>до<BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT>,<BOOST_LOG_DECLARE_GLOBAL_LOGGER_CTOR_ARGS>до<BOOST_LOG_INLINE_GLOBAL_LOGGER_CTOR_ARGS>. Кроме того, макросы больше не определяют бесплатную функцию<get_logger>для приобретения регистратора. Используйте<logger::get>. См.здесьдля получения дополнительной информации.
Логгер канала теперь поддерживает изменение названия канала после строительства. Имя канала может быть установлено либо путем вызова метода модификатора, либо путем указания имени в записи журнала. Добавлены<BOOST_LOG_STREAM_CHANNEL>и<BOOST_LOG_STREAM_CHANNEL_SEV>(а также их стенограммы<BOOST_LOG_CHANNEL>и<BOOST_LOG_CHANNEL_SEV>) макросы, позволяющие указать название канала для записи журнала.
Лесозаготовки:
Типы интегральных констант для сислога и журнала событий были переименованы в суффикс<_t>.
Форматирование функциональности переместилось на тонущие фронтенды. Бэкэнды Sink, поддерживающие форматирование записей, происходят из шаблона класса<basic_formatting_sink_backend>, который указывает на фронтенд, что требуется форматирование записей. Это нарушает пользовательский API библиотеки: формататор и локализация должны быть настроены на интерфейс, а не на бэкэнд.
Поддержка форматирования больше не делает синхронизацию интерфейсных потоков обязательной. Форматирование выполняется до блокировки для обработки записи в бэкэнде и может выполняться одновременно в нескольких потоках.
Добавлена поддержка промывных раковин. Бэкэнд раковины, поддерживающий промывку, должен определять публичный метод со следующей подписью:<voidflush()>.
Асинхронная раковина переделана, приказав удалить асинхронную раковину. Шаблон класса<asynchronous_sink>теперь позволяет указывать стратегию очередей записей. Предусмотрено несколько стратегий, в том числе<unbounded_fifo_queue>(по умолчанию) и<unbounded_ordering_queue>, которые охватывают функциональность асинхронных интерфейсов раковины в версиях 1.x. См.асинхронная раковина фронтенддокументы для более подробной информации.
Безблоковая запись FIFO, стоящая в очереди в асинхронных раковинах, переработана, чтобы уменьшить киоски обработки записей журнала.
Добавлен<Append>параметр конфигурации файла для текстовых поглотителей файлов. Если этот параметр установлен на<true>, раковина будет добавлять записи журнала к существующему файлу журнала вместо перезаписи.
Добавлены ограниченные варианты асинхронной раковины фронтендов. Реализованы две стратегии обработки переливов очередей: либо бревенчатые записи сбрасываются, либо блокируются бревенчатые нити до тех пор, пока в очереди не останется места.
Фильтры и форматеры:
В результате объединения типов символов фильтры больше не зависят от типа символа.
Для динамического хранения фильтров и форматировщиков были введены два новых типа:<filter>и<basic_formatter>. Оба новых типа реализуют стирание типов и предоставляют операторам вызовов функции вызывать сохраненный фильтр или формататор.
Фильтры и форматеры были переписаны. Новая реализация основана наBoost.Phoenixи находится в пространстве имен<expressions>. Заполнители атрибутов теперь совместимы с другими выражениями шаблонов на основеBoost.Phoenix. Все заголовки выражения шаблона теперь находятся в подкаталоге<expressions>.
Библиотека теперь поддерживает определение ключевых слов для атрибутов (см.<BOOST_LOG_ATTRIBUTE_KEYWORD>макрос). Ключевые слова могут использоваться в шаблонных выражениях вместо заполнителей атрибутов, а также в качестве ключа в поиске контейнеров.
Фильтры и формататоры не делают исключений по умолчанию, когда значение атрибута не может быть использовано для завершения функции (например, когда значение отсутствует или имеет неподходящий тип). Подэкспрессия оскорбляющего фильтра вернется<false>в таких случаях, формататор приведет к пустой строке вместо значения. Поведение может быть изменено путем вызова функций<or_default>или<or_throw>на заполнителе значения атрибута в выражении фильтрации/форматирования.
Реализация форматирования даты и времени больше не основана наBoost.DateTime. Новая реализация улучшает производительность форматирования. Форматтер был переименован в<format_date_time>.
Названный форматировщик теперь поддерживает спецификацию формата. Формат области может включать в себя название области, а также имя файла и номер строки. Форматтер был переименован в<format_named_scope>.
Характерные декораторыбыли переименованы в<c_decor>,<c_ascii_decor>,<xml_decor>и<csv_decor>. В настоящее время декоратор носит имя<char_decor>.
Добавлен новыйканал строгости фильтра. Фильтр позволяет устанавливать пороги жесткости для различных каналов. Фильтр проверяет уровень серьезности записи журнала по отношению к порогу, соответствующему каналу, к которому принадлежит запись.
Изменения в документации:
Большинство примеров кода из документов были извлечены в компилируемые отдельные примеры, которые могут быть использованы для тестирования и экспериментов с библиотекой.
Добавлено много перекрестных ссылок на документацию, что должно упростить навигацию.
Разное:
Исправлена ошибка: регистрирующее ядро может войти в бесконечный цикл внутри<push_record>, если раковина бросает, и исключение подавляется обработчиком исключений, установленным в ядре.
Изменен тип реализации диспетчеризации для уменьшения использования виртуальных функций. Это значительно уменьшило размер библиотеки.
Диспетчеры типов стали более дружелюбными к настройкам, в которых скрытая видимость устанавливается по умолчанию.
Изменился интерфейс диспетчеров типов. Диспетчер теперь возвращает<type_visitor>экземпляр по стоимости, и посетитель больше не является базой для фактического получателя отправленной стоимости. Вместо этого посетитель теперь обращается к получателю, если он способен потреблять ценность. Метод<visit>был переименован в<operator()>. Диспетчер статического типа теперь требует ссылки на приемник на конструкции, это не означает, что приемник происходит от диспетчера больше.
Утилита<slim_string>была удалена. Никакой замены нет.
Библиотека теперь использует множество функций из последнего стандарта C++ (он же C++11). Например, многие компоненты библиотеки теперь поддерживают семантику движения.Boost.Moveиспользуется для эмуляции движения на C++03-совместимых компиляторах.
Этот выпуск в основном исправляет ошибки в коде и документации. Следующий крупный релиз (2.0) будет содержать изменения и дополнения. Ветка 1.0 не получит никаких обновлений функций.
Добавлена некоторая оптимизация для локального хранения потоков. В настройках Windows, если вы динамически загружаете Boost. Лог-двоичные файлы во время работы приложения, эта оптимизация может привести к сбоям. В этом случае вы можете отключить его, определив<BOOST_LOG_NO_COMPILER_TLS>во время процесса создания библиотеки. Макрос также влияет на другие платформы, что может быть полезно, если ваш компилятор не поддерживает TLS.
Добавлено несколько общедоступных аксессуаров и конструкторов удобств для строгости и регистраторов каналов.
Добавлена возможность вращать лог-файлы в заданные моменты времени. Ключевое слово<rotation_interval>больше не доступно. Такая же функциональность достигается с помощью нового ключевого слова<time_based_rotation>и предиката<rotation_at_time_interval>. См.здесьдля более подробной информации.
Улучшенная поддержка MinGW и Cygwin.
Ряд багов исправлен. Добавлены обходные пути для компиляции по GCC 4.2.
существенное улучшение документации. Учебный раздел был реорганизован.
Заголовки библиотек были реорганизованы. Некоторые другие библиотеки Boost, которые ранее были включены заголовками, стали необязательными. Такие зависимости были выделены в отдельные заголовки в каталоге<support>. Заголовки библиотек верхнего уровня теперь в основном включают вложенные заголовки.
Ключевые слова перешли в выделенное<keywords>пространство имен. В<sinks>,<attributes>и т.д. больше нет вложенных<keywords>пространств имен. Все ключевые слова были выделены в отдельные заголовки в каталоге<keywords>.
Снят вращающийся поток файлов. В качестве замены добавленановая раковина, которая позволяет достичь тех же результатов, добавляет еще несколько функций.
Добавлен новый заказ асинхронной раковины фронтенд.
syslogsink backend теперь поддерживается и в Windows. Ячейка больше не требует встроенной поддержки POSIX API для syslog, но может отправлять пакеты syslog на удаленный сервер через UDP.
Внедрение логгеров было улучшено. Механизм функциональной композиции был очищен.
Добавлена поддержка масштабируемой лесозаготовки. В настоящее время существует отдельныйобъект записи журнала, который возвращается ядром в результате фильтрации. Заполнить сообщение записи можно любым способом, который захочет пользователь, не обязательно с помощью потокового выражения. Объект записи теперь обрабатывается раковинами и формататорами.
Добавлена поддержка контроля исключений. Пользователь может зарегистрировать обработчиков исключений на одном из трех уровней: для конкретной раковины, в основном слое и для конкретного регистратора (учитывая, что он имеет соответствующую функцию). Зубы и ядро не будут подавлять исключения по умолчанию. Фильтр и формататоры будут бросать, если запрошенное значение атрибута не найдено.
Добавлено несколько новых форматеров, называемых декораторами персонажей. Они могут быть полезны для последующей обработки отформатированного вывода перед его передачей на раковину.
Добавлены атрибуты для идентификаторов потоков и процессов. Эти идентификаторы автоматически добавляются после вызова<add_common_attributes>.
Функции инициализации помощника, такие как<init_log_to_file>, теперь принимают больше вариантов настройки в качестве аргументов.
Обнаружен новый интерфейс инициализации. Можно заполнить контейнер настроек и использовать его для инициализации библиотеки.
Код поддержки настройки библиотеки был извлечен в отдельный двоичный файл. Далее, этот бинарный будет сделан необязательным для создания.
Добавлен новый режим рубки, называемый тривиальной рубкой. В этом режиме библиотека вообще не требует инициализации, однако она не предлагает много способов настройки.
Ряд багов исправлен.
Несколько оптимизаций добавлены для улучшения производительности многопоточных приложений.
Удалены некоторые обходные пути для более старых выпусков Boost. Библиотека теперь требует увеличения 1,39 или больше.
Добавлено несколько Windows-специфических раковин: Event Log (упрощенный и расширенный), отладчик Windows и экспериментальный Event Trace для Windows Vista и более поздних версий.
Логгеры теперь состоят из ряда независимых функций, которые могут быть составлены так, как нужно пользователю. Пользовательские функции могут быть разработаны и введены в смесь.
Улучшились экстракторы значений атрибутов. С помощью новой функции извлечения значения атрибутов могут быть извлечены из представления значений атрибутов с помощью лямбда-функторов.
Некоторые файлы и классы были перемещены или переименованы для улучшения ясности кода и сокращения имен.
Статья Changelog раздела Chapter 1. Boost.Log v2 Chapter 1. Boost.Log v2 может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.