Вход на экран и в файл - PullRequest
3 голосов
/ 29 мая 2010

Какой шаблон проектирования может применяться к ведению журнала? Что обычно используется в такой ситуации? Есть хорошие уроки?

Я пишу клиент-серверное приложение, используя C89 и gcc 4.4.4. Теперь мне нужно реализовать некоторые функции ведения журнала, которые будут отображать сообщения журнала на экране, а также вести журнал в файл.

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

Ответы [ 2 ]

4 голосов
/ 29 мая 2010

Некоторые намеки / понятия:

  1. Механизм для создания записи журнала с параметром для уровня журнала или подразумеваемым именем функции.
  2. Обычно строка формата в стиле printf, за которой следуют параметры.
  3. Структура данных для сбора сообщений из одного или нескольких генерирующих их потоков.
  4. Некоторая форма отметки времени.
  5. Внутренний поток, который обрабатывает собранные сообщения и генерирует выходные данные. Это может быть то, где вы настраиваете, какие уровни будут отображаться и / или записываться в файл.
  6. vsnprintf () - это функция, которая принимает переменное число параметров и часто используется в разделе обработки на стороне сервера.

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

Удачи.

1 голос
/ 29 мая 2010

Если вам нужно имя шаблона проектирования: попробуйте Шаблон наблюдателя .

Возможно, эта страница тоже может помочь: http://blogs.msdn.com/b/dustin_andrews/archive/2007/11/01/how-to-easily-use-the-observer-pattern-to-loosely-couple-tests-to-the-logging-engine.aspx

...