Каковы хорошие методы для регистрации ваших приложений? - PullRequest
6 голосов
/ 07 октября 2008

Ведение журнала может быть сложным, быстро. Учитывая, что у вас есть некоторый код, как вы добавляете в него логи? Какую библиотеку (ы) вы используете?

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

Ответы [ 5 ]

3 голосов
/ 07 октября 2008

Библиотеки: Log4J и Log4Net (для Java и .NET соответственно)

С сайта Log4J:

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

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

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

Ведение журнала предоставляет разработчику подробный контекст для сбоев приложений. С другой стороны, тестирование обеспечивает гарантию качества и уверенность в приложении. Регистрация и тестирование не следует путать. Они дополняют друг друга. Когда логирование используется мудро, оно может оказаться важным инструментом.

2 голосов
/ 07 октября 2008

Это обсуждалось в других вопросах. Если вы C # человек, посмотрите на Какое лучшее решение для ведения журнала для проекта c # net 3.5 или Какова ваша философия ведения журнала?

Поиск в журнале, и вы найдете еще много. :)

1 голос
/ 07 октября 2008

Инструмент для просмотра журналов Log4X: Цепная пила

0 голосов
/ 18 апреля 2018

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

  • процессорное время, затрачиваемое на добавление или сборку конкретной строки журнала и сборки мусора
  • Рабочая память, затрачиваемая на добавление или сборку конкретной строки журнала
  • Процессорное время, затрачиваемое на запись в пункт назначения (I / O), может быть файловым, консольным, сетевым и т. Д.
  • Время на стене, потраченное на ожидание или борьбу на общем ресурсе или общем месте назначения Это может быть файл на диске или синхронный метод внутри каркаса ведения журнала.
  • Дисковое пространство или любое другое хранилище, занимаемое для сохранения файла журнала

Ниже приведены действия, которые вы можете сделать, чтобы свести к минимуму вышеописанное.

  • Имейте контроль над регистрацией. Имеют надлежащие уровни ведения журнала, поэтому в производстве могут использоваться только INFO, WARN, ERROR, а в разработке - DEBUG, TRACE. Наиболее важные уровни не должны контролировать запись журналов в место назначения, но также должны контролировать сборку строк журнала. Для этого используйте параметризованное ведение журнала (https://www.slf4j.org/faq.html#logging_performance) или просто проверьте, включен ли уровень журнала перед сборкой строки журнала. Использование лямбды также является альтернативой.
  • Избегайте дорогостоящего форматирования. Если нужна красивая печать, напишите инструмент извлечения журналов, преобразуйте необработанные строки журнала в красивые строки журнала, что произойдет в автономном режиме и по требованию. Есть много полезных вещей, которые можно легко сделать, если логи переадресовываются таким инструментом, как Splunk или ElasticSearch.
  • Минимизировать размер журнала. Используйте сокращенные коды, чтобы минимизировать размер строк журнала, сохраняя читабельность.
  • Минимизировать частоту регистрации. Принимая решение о регистрации чего-либо, приблизительно оцените размер журнала / транзакцию или количество строк журнала / транзакцию. Если это больше, чем 1: 100, то это слишком много, и это зависит.
  • Попробуйте асинхронное ведение журнала. Другими словами, не пишите в место назначения (I / O) в потоке транзакции, скорее добавьте его в буфер и займитесь им в фоновом режиме. RandomAccessFileAppender - это такая возможность, предоставляемая Log4J
  • Разделяй и властвуй. Сегментируйте журналы. Позже в производстве это можно использовать для распределения нагрузки на места назначения (I / O), имея разные места назначения (файлы) для разных журналов
0 голосов
/ 07 октября 2008

Некоторые аспекты, которые я хотел бы добавить о практике ведения журналов.

  1. Сделать практикой отделение функциональной регистрации от разработки. В производственной среде функциональное ведение журнала может включать СУБД или какой-либо другой ресурс. Мы можем достичь этого, написав обертки на реальном логгере.
  2. В многопользовательской среде операторы журнала становятся трудными для чтения, имеют уникальный идентификатор сеанса пользователя и регистрируют его на этапе разработки. Затем простой Perl-скрипт может отфильтровать разделы, упрощая отладку. Легко сделать с помощью классов-оболочек, как описано выше
  3. Классы Wrapper также освобождают вас от привязки к одному конкретному файлу регистрации.
  4. Попробуйте аспектно-ориентированный подход к ведению журналов, где это возможно, это, по сути, делается с использованием срезов точек (точки входа / выхода метода могут быть легко покрыты). Очистка кода будет проще.
...