В чем разница между 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