Из чего преимущество log4j
по набору System.out
и System.err
производить к файлу журнала?
На высоком уровне выигрыш Log4j по сравнению с ручным протоколированием заключается в том, что вы можете отделить код протоколирования от того, что вы на самом деле хотите протоколировать и где и как вы хотите это делать. Детали о вербовости/фильтрации, форматировании, местоположении журнала и даже типе журнала (файлы, сеть и т.д.) обрабатываются декларативно с помощью конфигурации и расширяемо с помощью пользовательских аппендеров, вместо того, чтобы вам пришлось самим кодировать эту гибкость.
Это очень важно, потому что разработчикам часто трудно предсказать, как изменятся потребности в регистрации после того, как их программное обеспечение будет запущено в производство. Операционные команды, управляющие этим ПО, могут нуждаться в менее подробных журналах, могут нуждаться в нескольких журналах, могут нуждаться в отправке этих журналов на несколько серверов, иногда могут нуждаться в очень подробных данных для устранения неполадок и т. д. И обычно операционные команды не могут убедить разработчика внести значительные изменения в код, если им нужно изменить способ ведения журналов. Это часто приводит к простою производства, трениям между операторами и разработчиками, а также к пустой трате времени.
С точки зрения разработчика, Log4j защищает вас от необходимости вносить изменения в код для поддержки протоколирования и защищает вас от приставаний людей, которые хотят внести изменения в протоколирование. Это позволяет людям, управляющим вашим кодом, почесать свой собственный зуд, а не донимать вас!
Кроме того, поскольку Log4j является стандартом де-факто для протоколирования в Java, существует множество инструментов, которые могут делать классные вещи с Log4j, что позволяет вам и вашим операционным командам не изобретать велосипед.
Моя любимая функция - возможность легко писать аппендеры, отправляющие данные в нефайловые источники, такие как SYSLOG, Splunk и т.д., что позволяет легко интегрировать пользовательский логгинг вашего приложения в инструменты управления операциями, которые уже использует ваш ИТ-отдел.
Log4j предлагает возможность поворачивать файлы журналов в зависимости от размера и удалять их в зависимости от количества (logrotate), чтобы ваши серверы не заполняли свои диски. Лично я думаю, что это одна из наиболее ценных функций в Log4j.
Также Log4j популярен и понятен многим разработчикам. Последние три компании, в которых я работал, использовали Log4j в большинстве проектов.
Уровни, форматирование, логирование в несколько файлов... Фреймворк логирования (даже если это java.util.logging) действительно полезен, если есть вероятность, что что-то может пойти не так во время работы вашего кода.
На самом деле сегодня вам стоит заглянуть в фасад slf4j, поскольку он позволяет вам использовать {} -замесители для наиболее кратких утверждений. Затем вы можете использовать соответствующую структуру ведения журнала за slf4j для обработки фактической обработки ваших операторов журнала. Это может быть log4j или slf4j-simple, который просто распечатывает всю ИНФОРМАЦИЮ, ПРЕДУПРЕЖДЕНИЕ и ОШИБКУ, а все остальное отбрасывает.
Важное наблюдение, которое вам необходимо сделать, заключается в том, что ЗАПИСЬ операторов журнала выполняется, когда код написан, а РЕШЕНИЕ о том, что необходимо, делается при развертывании кода, что может происходить через годы после того, как код был написан и проверено. System.out.println требует, чтобы вы физически изменили свой код, чтобы избавиться от них, что недопустимо в жестком цикле запись-тест-развертывание. ЕСЛИ код изменяется, его необходимо протестировать повторно. С slf4j вы просто активируете тех, кого хотите видеть.
У нас есть полное ведение журнала на этапе тестирования и довольно подробное ведение журнала в начальный период производственного развертывания, после которого мы переходим только к информации. Это дает нам полную информацию в сценарии, в котором отладка дела возможна очень редко.
Эта статья, которую я написал, может показаться вам интересной. Целевая аудитория - это начинающие программисты на Java, и я намерен с самого начала дать им хорошие привычки. http://runjva.appspot.com/logging101/index.html
мои избранные (не все)
log4j позволяет вам вести журнал в различные ресурсы, например, журнал событий, электронную почту, файловую систему и т.д., позволяя вашему приложению оставаться отделенным от всех этих ресурсов. Более того, вы получаете возможность использовать общий интерфейс для регистрации на всех различных ресурсах без необходимости изучать или интегрировать соответствующие API.