.извините, что пришлось это сделать. Добро пожаловать в мой первый dev.to пост, надеюсь, первый из многих!
Я хотел начать с действительно простой утилиты, которую разработчики Java могут легко интегрировать в свой код и улучшить кодовую базу.
То, что я вижу очень часто, обычно в устаревших проектах, – это объявление регистратора для каждого класса.
1 public class MyClass { 2 3 private static Logger logger = LoggerFactory.getLogger(MyClass.class); 4 5 ... 6 }
Реально это не будет очень ресурсоемким, но мы определенно можем внести улучшения для упрощения.
Введения.. ведение журнала с помощью CDI!
С помощью CDI мы можем внедрить регистратор SL4J (или вашу любимую реализацию).
Первое, что нам нужно сделать, это внедрить производителя журналов с использованием API Injection Point .
1 @ApplicationScoped 2 public class LoggerProducer { 3 4 @Produces 5 public Logger getLogger(final InjectionPoint ip) { 6 return LoggerFactory.getLogger(ip.getMember().getDeclaringClass()); 6 } 7 }
Мы указываем область действия класса как @ApplicationScoped . API точки внедрения позволяет нам узнать объявляющий класс внедренного регистратора.
Импорт:
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.InjectionPoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
Примечание: Убедитесь, что правильный @Производит аннотация импортируется, а не производитель JAX-RS
Следующий шаг – просто @@Вводим наш регистратор в наш класс и начинаем регистрироваться.
1 @ApplicationScoped 2 public class MyClass { 3 4 @Inject 5 private Logger logger; 6 7 public void myMethod(){ 8 logger.info("My log!"); 9 } 10 }
Вот он у нас есть, простой регистратор CDI.
Существуют и другие реализации, такие как Lombok logger . Однако есть несколько шагов, чтобы сделать Ломбок совместимым с вашей ИДЕЕЙ и я считаю, что регистратор CDI проще интегрировать с существующей кодовой базой.
Оригинал: “https://dev.to/azaidi93/log-log-log-how-to-deforest-with-java-cdi-3361”