Ведение журнала и фильтрация с использованием log4cxx

#c #logging #log4cxx

#c #ведение журнала #log4cxx

Вопрос:

Я работаю над приложением, в котором мне нужна функция ведения журнала и фильтрации. Я использую c . Я узнал о ведении журнала поддержки log4cxx.

У меня возникают трудности с фильтрацией.

У меня есть пять полей

  1. MacID
  2. Дата и время
  3. Тип команды
  4. Статус
  5. Текстовое сообщение

Мне нужно сохранить эти 5 полей в файле журнала и отфильтровать его также на основе приведенного ниже параметра фильтрации. Ведение журнала и фильтрация будут выполняться непосредственно во время выполнения. Как только размер файла достигнет 10 Мбайт, начнется перезапись файла с самого начала.

Параметры фильтрации
1. MacID
2. дата и время

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

  1. Возможно ли сохранить более одного поля в файле журнала с использованием log4CXX?
  2. Как фильтровать информацию на основе вышеупомянутых критериев?
  3. Нужно ли мне писать свой собственный класс фильтра, наследующий от существующих классов фильтров?
  4. Нужно ли мне написать настраиваемый класс logger для хранения 5 полей в файле журнала?

Комментарии:

1. Фильтровать с помощью регистратора? По уровню журнала? Или, может быть, с помощью какого-либо содержимого в сообщении журнала? Вы должны быть более конкретными в отношении того, что вы хотите.

2. Если вы используете C и хотите иметь хороший механизм ведения журнала, возможно, вы захотите попробовать log4cpp.sourceforge.net .

3. @Chris_vr ваш вопрос все еще не ясен. Что вы хотите отфильтровать? Обычно фреймворки ведения журнала фильтруют на основе серьезности уровня ведения журнала.

4. смотрите, помимо вышеупомянутого поля, в файле журнала также есть другие поля, такие как сообщение о событии , я хотел отфильтровать это поле

5. @Chris_vr Не могли бы вы выразиться более конкретно? Вы хотите фильтровать во время выполнения или фильтровать файл журнала, который уже присутствует? И что вы имеете в виду под 5 полями. Log4cxx принимает только два параметра. Уровень и сообщение.

Ответ №1:

Однажды я столкнулся с аналогичной проблемой, чем пункты 1 и 4. Я прочитал код log4cxx и нашел возможное решение. Коллега по работе протестировал решение и усовершенствовал его. С его выводами можно ознакомиться здесь.

Мы спросили в списке рассылки log4cxx, правильное ли это решение, и это ответ, который мы получили. Я надеюсь, что это поможет.

Ответ №2:

Я не думаю, что log4cxx — это подходящие инструменты для вашей задачи, и я не совсем уверен, можно ли это вообще сделать с помощью log4cxx.

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

Комментарии:

1. Есть ли какой-либо другой способ сделать это. Я имею в виду, есть ли другой бесплатный сторонний бесплатный API, который я могу использовать для этой цели.

2. Вы могли бы использовать log4cxx. Всегда регистрируйте свои поля и пытайтесь отфильтровать выходные данные с помощью chainsaw. logging.apache.org/chainsaw/index.html . Вы можете использовать regex для некоторой приличной фильтрации с его помощью.