#c #logging #log4cxx
#c #ведение журнала #log4cxx
Вопрос:
Я работаю над приложением, в котором мне нужна функция ведения журнала и фильтрации. Я использую c . Я узнал о ведении журнала поддержки log4cxx.
У меня возникают трудности с фильтрацией.
У меня есть пять полей
- MacID
- Дата и время
- Тип команды
- Статус
- Текстовое сообщение
Мне нужно сохранить эти 5 полей в файле журнала и отфильтровать его также на основе приведенного ниже параметра фильтрации. Ведение журнала и фильтрация будут выполняться непосредственно во время выполнения. Как только размер файла достигнет 10 Мбайт, начнется перезапись файла с самого начала.
Параметры фильтрации
1. MacID
2. дата и время
Фильтрация может выполняться путем фильтрации либо одного, либо обоих. Результат должен возвращать все поля в файле журнала.
- Возможно ли сохранить более одного поля в файле журнала с использованием log4CXX?
- Как фильтровать информацию на основе вышеупомянутых критериев?
- Нужно ли мне писать свой собственный класс фильтра, наследующий от существующих классов фильтров?
- Нужно ли мне написать настраиваемый класс 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 для некоторой приличной фильтрации с его помощью.