What I want is to make spring autowire a logger. So, in other words, I want to have this working:
import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class MainController { @Autowired private Logger logger; @RequestMapping("/") public String enterSite(HttpServletResponse response) { logger.info("site entered"); return "welcome"; } }
Right now it throws an exception at startup: “No qualifying bean of type [org.slf4j.Logger] found for dependency…”.
My pom.xml dependencies:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.0.M1</version> <relativePath /> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.1-901.jdbc4</version> </dependency> <!-- <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> --> </dependencies>
I read this: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-logging
It says if you use one of the starter poms (I do) Logback is used – but for internal logging. Can it be autowired in my classes?
Advertisement
Answer
Although it is not the usual way you can add a logger bean directly in your context reproducing the classic bind:
private final Logger logger = LoggerFactory.getLogger(MainController.class);
simply inserting in the spring context:
<bean id="logger" scope="prototype" class="org.slf4j.LoggerFactory" factory-method="getLogger"> <constructor-arg name="name" value="youLoggerName" /> </bean>
then you can simply inject your logger:
@Autowired private Logger logger;