IoC, or DI definitely takes a perspective turnaround inside your head, but you get around it slowly. I was playing around ways to integrate LogBack, and Spring – essentially around having Spring give me a pre-created instance of LogBack logger.
I searched around posts, but most people seem to be against using Spring just for substituting one-line of Logback (Logger log = LoggerFactory.getLogger("LogbackTest");
) to get your logger.
I, on the other hand, was more interested in how to get Spring give me a LogBack logger instance without too much contrived hand-written code to achieve so. And with a bit of reading through Spring principles, documentation I found the way.
Essentially, when using Logback’s LoggerFactory you have access to only a single getLogger() factory method. This is static which makes things a bit different for what Spring would call a bean – a class providing constructor, getter, setter methods. To circumvent this non-bean style, Spring provides what you call as static initializers a.k.a substitutes for constructors, which allow you to call a static method in lieu of calling a constructor on an object.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="bean1" class="org.slf4j.LoggerFactory" factory-method="getLogger"> <constructor-arg value="LogbackTest" /> </bean> </beans>
Now, this bean1 can be used as a regular bean inside your class
ApplicationContext ctx = new FileSystemXmlApplicationContext("logbacktest.xml"); Logger log = (Logger) ctx.getBean("bean1"); log.debug("This is my first message"); log.info("How about this information message");
Throw in a logback.xml in your classpath, and viola you have a nice Spring injected dependency – log in your code, while still using Logback!
It’s really a nice and helpful piece of information. I’m glad that you shared this helpful info with us. Please keep us informed like this. Thanks for sharing.
Great work keep it coming
I adore your wordpress web template, wherever do you get a hold of it from?