В чем разница между Java Logger и System.out.println

Я посмотрел API для класса логгера ( здесь), и я смотрел на Logger.info метод. Я был смущен, когда увидел его периметр как сообщение, отображаемое в виде строки public void info(String msg) который такой же как System.out.println(), Мне интересно, в чем разница между этими двумя, и почему мы используем Logger вместо System.out.println когда они могут распечатать одно и то же.

В логгере.

Logger.info("Hello")

Выход:

[INFO ] 2015-08-07 11:18:46.140 [main] ClassName Hello

В System.out.println

`System.out.println("Hello")

Выход: привет

4 ответа

Решение

Обычно, потому что Logger можно настроить для записи в файл (и на консоль). Он также может быть настроен на более высокую (или более низкую) степень детализации в отношении обмена сообщениями. Например, вы можете настроить (во время выполнения) уровень предупреждения. В этом случае, этот loger не будет отображать отладочные или информационные сообщения. Он может включать в себя такую ​​информацию, как класс, который пишет, номер строки, а также дату и время (сообщения).

Использование логгера позволяет вам абстрагироваться от многих деталей и сделать гораздо больше, чем вы могли бы записать на стандартный вывод.

  • Вы можете указать различные пункты назначения для записи. Различные приложения пишут в файл, катят файл за заданные периоды времени, записывают в очередь или базу данных и т. Д.

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

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

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

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

Основное различие между Logger и System.out.println заключается в
Logger: Печатает текст в файл (текстовый файл)
System.out.println: Выводит вывод в консоль

Logger полезен, когда вы собираетесь на любые проекты LIVE.
Потому что, если какой-либо проект разработан и развернут, вы не можете проверить консоль. В это время Logger будет полезен для отслеживания потока вашего проекта, также вы можете найти ошибку или исключение, если вы указали регистратор в блоке catch{...}.

Также пройдите этот Logger против System.out.println

  • Но когда мы используем какой-либо механизм ведения журнала (log4j, slf4j, logback и т. Д.), Мы настраиваем добавочные файлы и соответствующие целевые файлы журнала для каждого пакета. По умолчанию консольный приложение отключено, если вы явно не настроили его для входа в пункт назначения.
  • System.out.println всегда регистрирует сообщение для консольного приложения. Таким образом, его следует использовать только в том случае, если мы уверены, что приложение для консоли настроено в файле конфигурации регистратора. В противном случае мы получим журналы на консоли сервера, что неверно. Любой журнал изнутри приложения должен идти в соответствующий журнал приложения, а не в журнал сервера.

Позвольте мне объяснить на примере.

  • Если мы создаем приложение с именем Tracker, использующее механизм ведения журнала для запуска в контейнере Tomcat, и мы настроили приложения для ведения журнала приложения с файлом журнала назначения как tracker-application.log, и мы не настроили приложение консоли.
  • Затем, если JVM обнаружит System.out.println, журнал будет отправлен в журнал сервера сервера Tomcat, что неверно, поскольку журнал сервера должен содержать только информацию о сервере, а не о приложении.

Но если мы создали консольный appender с целевым файлом журнала, он будет зарегистрирован правильно.

Надеюсь, мне было ясно.;)

Для получения рекомендаций рекомендуется не использовать System.out.println в коде на стороне сервера или http://www.vipan.com/htdocs/log4jhelp.html

Для различий между ними, пожалуйста, обратитесь к Logger против System.out.println

Другие вопросы по тегам