Hello World!
..sorry had to do it. Welcome to my first dev.to post, hopefully the first of many!
I wanted to start off with a really simple utility that Java developers can easily integrate in their code and improve the codebase.
Something I see very often, usually in legacy projects, is a logger being declared for every class.
1 public class MyClass { 2 3 private static Logger logger = LoggerFactory.getLogger(MyClass.class); 4 5 ... 6 }
Realistically this won't be very resource intensive but we can definitely make improvements to simplify.
Introducing.. logging with CDI!
With CDI, we can inject a SL4J (or your favourite implementation) logger.
First thing we need to do is implement a logging producer using the Injection Point API.
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 }
We specify the scope of the class as @ApplicationScoped. The injection point API allows us to know the declaring class of the injected logger.
Imports :
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.InjectionPoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
Note : Ensure that the correct @Produces annotation is imported, not the JAX-RS producer
Next step is to simply @Inject our logger into our class and begin to log.
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 }
There we have it, an easy CDI logger.
There are other implementations such as a Lombok logger. However, there are some steps to make Lombok compatible with your IDE and I believe a CDI logger is easier to integrate with an existing codebase.
Top comments (0)