Рубрики
Без рубрики

Оставляя следы, или как использовать журнал

Старший нужно знать, как использовать журнал… лгу! Любому разработчику нужно знать, как использовать журнал. Здесь я представляю, как использовать SLF4J в Java. С тегом desenvolvimento de software, ведение журнала, java, slf4j.

Эта запись необходима для другого, что я буду писать…. 🤔

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

С этой должности, я хочу, чтобы шоу:

  1. Что это журнал?
  2. Потому что использование журнала в Java?
  3. Как использовать SLF4J в Java?
  4. Отобразить простую benchmark между реализациями от SLF4J.

Ну хорошо, строгая имени журнал означает реестра. И этот тип файла не обязательно связан с содержанием. Ha inuméros outros tempos de log, como por exemplo no Apache Kafka, cada раздел это файл журнала, есть базы данных, которые работают, в основном, в виде журнала операций, я считаю, что Datomic – это так.

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

В этом посте мы будем рассматривать журналов выполнения. Эти необходимы для любого приложения.

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

Сценарий

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

Приложение

Приложения, которые мы установили на нашем пк или мобильный телефон. Когда ошибка происходит в приложении времена две вещи:

  1. Описание ошибки пользователя, угрюмый
  2. Пользователь угрюмый

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

В этом случае журнал должен описать состояние приложения, и это будет весьма полезно для устранения неполадок или просто исправить ошибку.

Агентов и Серверов

Ahhh… И если вы не пользователь? Будет давать ошибку, никто не будет видеть… Вы не будете знать, как и где он дал ошибку… Как делает?

Первый параметр, Агенты являются программное обеспечение, интеллектуальные autonomos. Они не требуют взаимодействия с другим по/пользователи. Вы можете увидеть в действии… google !

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

В мире Java существует большое беспокойство стандартизации. Таким образом, даже если речь Журнала также у нас есть по умолчанию:

  1. Не используйте стандартную библиотеку Java. Почему? Потому что не увы!
  2. Используйте SLF4J и выбор реализации, который вы хотите.

С SFL4J вам не нужно делать почти никаких настроек в коде, только для создания экземпляра в классах экземпляр logger.

O SLF4J

O Простой фасад ведения журнала для Java это библиотека для абстрагирования журнала, так что вы не должны застрять в реализации библиотеки журнала. Хотите изменить библиотека журнала? Только изменить пару строк в pom.xml !

Конфигурация o SLF4J

Чтобы настроить SLF4J и их реализация вам необходимо, в основном,:

  1. Добавить зависимость slf4j-api
  2. Добавить реализация SLF4J
    1. Или Log4J2
    2. Или Logback
    3. Или других реализации
  3. Экземпляр журнала и следа.

В основном не требуется файл конфигурации, несмотря на то настоятельно рекомендуем!

Здесь я оставляю пример не так просто, потому что использует переменные среды для настройки Журнал:

Обратите внимание на то, что на линии 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 вызовов в журнале. Тогда…

Мы можем видеть, что если мы снизим уровень журнала мы можем сократить время выполнения! Это потому, что:

  1. Меньше кода выполняется
  2. Нет узких мест для записи (файл, консоль, 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”