Эта запись необходима для другого, что я буду писать…. 🤔
Журнал является очень важным инструментом. Если вы просто разработчик, может быть, не знаете, полезность его, но уверен, что заботится о деятельности вашего программного обеспечения знаете.
С этой должности, я хочу, чтобы шоу:
- Что это журнал?
- Потому что использование журнала в Java?
- Как использовать SLF4J в Java?
- Отобразить простую benchmark между реализациями от SLF4J.
Ну хорошо, строгая имени журнал означает реестра. И этот тип файла не обязательно связан с содержанием. Ha inuméros outros tempos de log, como por exemplo no Apache Kafka, cada раздел это файл журнала, есть базы данных, которые работают, в основном, в виде журнала операций, я считаю, что Datomic – это так.
На самом деле, лог-файл-это файл, который будет содержать записи, что-то, что всегда добавляется в конец файла.
В этом посте мы будем рассматривать журналов выполнения. Эти необходимы для любого приложения.
Есть приложения, серверы, агентов и сценариев. Разница между этими типами программного обеспечения в режиме, как они работают.
Сценарий
В случае, если сценарий, выполнение этого всегда будет под руководством разработчика, или кто-то поддержка. Обычно запускается из командной строки и информация должна отображаться на консоли. В этом случае не требуется библиотека журнала, эффективность не является проблемой.
Приложение
Приложения, которые мы установили на нашем пк или мобильный телефон. Когда ошибка происходит в приложении времена две вещи:
- Описание ошибки пользователя, угрюмый
- Пользователь угрюмый
В этом случае, очень часто то, что пользователь будет описать не может быть достаточно, чтобы понять ошибки. Если эта ошибка возникает с помощью приложения для мобильного телефона… вы должны легион пользователей зло-humarados и только… Как исправить ошибку?
В этом случае журнал должен описать состояние приложения, и это будет весьма полезно для устранения неполадок или просто исправить ошибку.
Агентов и Серверов
Ahhh… И если вы не пользователь? Будет давать ошибку, никто не будет видеть… Вы не будете знать, как и где он дал ошибку… Как делает?
Первый параметр, Агенты являются программное обеспечение, интеллектуальные autonomos. Они не требуют взаимодействия с другим по/пользователи. Вы можете увидеть в действии… google !
В этом случае журнал выполнения является существенным. Вам нужно знать текущее состояние системы, и если вы дадите какие-то ошибки, должны иметь достаточно информации, чтобы понять, что произошло.
В мире Java существует большое беспокойство стандартизации. Таким образом, даже если речь Журнала также у нас есть по умолчанию:
- Не используйте стандартную библиотеку Java. Почему? Потому что не увы!
- Используйте SLF4J и выбор реализации, который вы хотите.
С SFL4J вам не нужно делать почти никаких настроек в коде, только для создания экземпляра в классах экземпляр logger.
O SLF4J
O Простой фасад ведения журнала для Java это библиотека для абстрагирования журнала, так что вы не должны застрять в реализации библиотеки журнала. Хотите изменить библиотека журнала? Только изменить пару строк в pom.xml
!
Конфигурация o SLF4J
Чтобы настроить SLF4J и их реализация вам необходимо, в основном,:
- Добавить зависимость slf4j-api
- Добавить реализация SLF4J
- Или Log4J2
- Или Logback
- Или других реализации
- Экземпляр журнала и следа.
В основном не требуется файл конфигурации, несмотря на то настоятельно рекомендуем!
Здесь я оставляю пример не так просто, потому что использует переменные среды для настройки Журнал:
Обратите внимание на то, что на линии 21 и 22, вы можете использовать как переменные среды LOG_LEVEL
e APPENDER
, com os respectivos valores padrão DEBUG
e STDOUT
. Таким образом, эти параметры могут быть изменены без необходимости сборки! 😎
Теперь для создания экземпляра журнала:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyClass { private static final Logger logger = LoggerFactory.getLogger(MyClass.class); public void beHappy() { logger.info("Yeah!"); // being happy! } }
Уровень Журнала
Одно из основных понятий из журнала Уровень, он выпускников важность информации зарегистрировано.
Нет SLF4J há os seguintes níveis: ОШИБКА, ПРЕДУПРЕЖДЕНИЕ, ИНФОРМАЦИЯ, ОТЛАДКА, ТРАССИРОВКА. Будучи TRACE менее важно и ERROR самое главное.
Это уровень журнала должен быть отрегулирован в соответствии с необходимостью, например. Приложение в среде разработки, должны работать на DEBUG или TRACE. Приложения в тестовой среде, в ИНФО. Уже приложение в производство, должен работать в ERROR или WARN.
Если есть ошибка в производство и необходимо взять несколько журналов, приложение должно быть восстановлено INFO.
Но следите, изменить уровень журнала может повлиять на производительность приложения.
Советы
Это нормально, в менее опытных разработчиков, создавать сообщения с contatenação строк… Но это не это хорошая практика, потому что в код чувствительных, может повлиять на результаты.
Но есть два способа решить это с помощью SLF4J.
С помощью binding
В SLF4J, вы можете решить это с помощью привязки. Вы увидите, что сигнатуры методов журнала принимают несколько параметров. Парень параметр связан со значением {}
в журнале. Таким образом, в случае, если сообщение не будет отображаться из-за уровня журнала, будут избегать творения несколько строк.
logger.trace("This is a trace message: ctx={} other-var={}", ctx, otherVar);
Проверка Уровня Журнала
Если сообщение действительно сложная, и вы хотите отформатировать, она достойно… Есть другой выход…
logger.debug("this is a debug message. If the level is bellow debug, it will not showed"); if(logger.isDebugEnabled()) { logger.debug("Some message formatted: value1=" + value1 + " ctxName=" + ctx.getName()); }
Не используйте вызовы способов
Еще один совет: никогда не использовать вызовы методов в качестве параметра! Почему? Потому что если этот журнал не включен, метод будет вызываться всегда. Пусть JVM позвонить toString
. Следует жизни….
logger.debug("This is a log registry: ctxName={}", ctx.getName()); // Wrong! logger.debug("This is a log registry: ctx={}", ctx); // Better now! Implement .toString correctly
Я сделал тест быстро, но его целью не является показать, какая реализация лучше. Есть несколько причин, , чтобы выбрать logback, но это ваш выбор.
vepo/slf4j-бенчмарк
mvn clean compile -P logback exec:java -DLOG_LEVEL=INFO -DAPPENDER=STDOUT mvn clean compile -P logback exec:java -DLOG_LEVEL=DEBUG -DAPPENDER=STDOUT mvn clean compile -P logback exec:java -DLOG_LEVEL=INFO -DAPPENDER=FILE mvn clean compile -P logback exec:java -DLOG_LEVEL=DEBUG -DAPPENDER=FILE mvn clean compile -P log4j exec:java -DLOG_LEVEL=info -DAPPENDER=stdout mvn clean compile -P log4j exec:java -DLOG_LEVEL=debug -DAPPENDER=stdout mvn clean compile -P log4j exec:java -DLOG_LEVEL=info -DAPPENDER=file mvn clean compile -P log4j exec:java -DLOG_LEVEL=debug -DAPPENDER=file
28055 мс | отлаживать | 28055 | STDOUT |
14 мс | информация | 0014 | STDOUT |
4976 мс | отлаживать | 4976 | файл |
17 мс | информация | 0017 | файл |
N/A | отлаживать | N/A | АСИНХРОННЫЙ |
N/A | информация | N/A | АСИНХРОННЫЙ |
30593 мс | отлаживать | 30593 | STDOUT |
16 мс | информация | 16 | STDOUT |
5137 мс | отлаживать | 5123 | файл |
20 мс | информация | 20 | файл |
Готовы центральной мой тест, чтобы показать, как использовать уровень журнала влияет на производительность.
В мой тест, сделаны 1 000 000 вызовов в журнале. Тогда…
Мы можем видеть, что если мы снизим уровень журнала мы можем сократить время выполнения! Это потому, что:
- Меньше кода выполняется
- Нет узких мест для записи (файл, консоль, TCP, etc…)
Нет программного обеспечения может выполняться без какой-то журнал. Для обеспечения более чувствительны журнала должны быть приняты всерьез.
Usando correttamente o log, você não terá impacto на производительность, e ainda conseguirá mais informações для устранения неполадок и исправления ошибок!
😎
Оригинал: “https://dev.to/vepo/deixando-rastros-ou-como-usar-log-peg”