MyWackoSite : СпецкурсCxx/Задачи/БиблиотекаЖурналирования

Задача: библиотека для журналирования

Описание

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

Задача 1

Функциональные требования

  1. Библиотека должна предоставлять интерфейс для записи некоторой информации в журнал.
  2. Пользователь должен иметь возможность задавать приоритет сообщения, который служит двум целям:
    • Библиотека должна отбрасывать сообщения с приоритетом ниже установленного.
    • Выходные записе в журнале должны содержать информацию о приоритете сообщения.
  3. Количество определенных приоритетов должно быть не меньше трех.
  4. Интерфейс библиотеки должен позволять состовлять журнальные записи из нескольких частей, каждая из которых может представлять собой:
    • строку;
    • целое число;
    • число с плавающей точкой;
    • указатель (целое число в 16-тиричной записи).
  5. Проверка типов из которых составляется запись должна происходить во время компиляции.
См. например Boost format
  1. Библиотека должна включать возможность для записи журналируемых сообщений в:
    1. поток ошибок;
    2. файл.

Нефункциональные требования

  1. Пользовательский код, использующий интерфейс библиотеки, должен быть независим от конкретного назначения журналируемой информации (терминал, файл, системный журнал, ...). Т.е. добавление нового способа для сохранения журналируемых данных не должно вызывать никаких изменений в исходном коде клиента библиотеки.
  2. Библиотека должна предоставлять пользователю возможность для разработки новых «драйверов» для вывода сообщений.

Требования к проекту

Проект должен включать в себя следующую пользовательскую документацию:
  1. Инструкция по сборке и установке.
  2. Описание интерфейса пользователя для записей в журнал.
  3. Описание интерфейса для создания новых драйверов вывода сообщений.

Задача 2

Задача состоит в перенесении процесса доставки (вывода) журналируемой информации в отдельный поток исполнения.

Требования

  1. Процесс вывода журналируемой записи должен осуществляться в отдельной нити.
  2. Пользователь не должен заботиться о сериализации доступа объектам библиотеки. Безопасность кода с точки зрения потоков должна осуществляться библиотекой.

Требования к проекту

  1. Использовать Boost thread для реализации многопоточности.
  2. Документировать стратегию обработки ошибочных ситуаций.

Задача 3

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

Можно воспользоваться паттерном стратегия.

Данная задача может рассматриваться как часть второй задачи и, соответственно может быть реализованна вместе с ней. Оцениваться такое решение будет так же как последовательное решение задач 2 и 3.