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

Home Page | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация | Вход:  Пароль:  

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

Описание

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

Задача 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.
 
Файлов нет. [Показать файлы/форму]
Комментарии [Скрыть комментарии/форму]

Что имеется ввиду под «Проверка типов, из которых составляется запись, должна происходить ВО ВРЕМЯ КОМПИЛЯЦИИ»?
И как это связано с Boost format? Там вроде обычные ошибки времени исполнения кидаются (runtime exception-ы).

-- НикитаПрокопов? (2006-05-09 22:55:36)

И еще вопрос: как связаны «сериализации доступа объектам библиотеки» и «безопасность кода с точки зрения потоков»? О какой вообще сериализации идет речь? О записи в журнал?

-- НикитаПрокопов? (2006-05-09 22:58:08)

Речь идет о том, что когда некоторая часть кода библиотеке начнет работать в отдельной нити, клиентский код может конфликтовать с кодом библиотеки. Например возможна ситуация, когда пользователь помещает сообщение в очередь, а библиотека удаляет сообщение из очереди в это время. Здесь нужно использовать какой-то из способов синхронизации потоков, например conditional variables.


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

-- AntonDedov (2006-05-10 13:01:56)

По поводу boost format, возможно я не разобрался. Я думаю в таком случае это требование можно ослабить.

-- AntonDedov (2006-05-10 13:04:13)