我总是使用以下模式构建(SLF4J)记录器:
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
到目前为止这已经奏效了,但我想知道static某些情况下的上下文以及需要一直传递具体的类文字,而不是仅仅使用非静态记录器
private final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)
这之前基本上已经问过(并回答)了LOG4J
和这里
我意识到final基本上是强制性的,所以我想知道在非静态环境中使用SLF4J的开销实际上有多高.
问:
使用是否有任何重大的实际开销
private final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)
过度
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
在普通(网络)应用程序?(这里不需要"讨论"高端,重载的webapps)
注意,我最终计划使用更好的方法使用CDI获得SLF4J记录器
@Inject private final Logger log;
Run Code Online (Sandbox Code Playgroud)
如http://www.seamframework.org/Weld/PortableExtensionsPackage#H-TtLoggerttInjection所述,但我需要先了解记录器缓存.
子问题:甚至可以使用?:
@Inject private static final Logger log;
Run Code Online (Sandbox Code Playgroud)
(刚开始用CDI开头)
当我使用CDI时,我可以使用@Produces注释来创建一个生成器方法,以便选择实现接口的bean将由@Inject注释注入.
现在我正在使用Spring,但我没有找到类似的东西.@Produces当我使用@Autowired注释时,我需要使用什么来获得与CDI中的注释相同的结果?
我想要的是让spring autowire成为记录器.所以,换句话说,我想让这个工作:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
现在它在启动时抛出异常:"找不到类型[org.slf4j.Logger]的限定bean用于依赖...".
我的pom.xml依赖项:
<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> …Run Code Online (Sandbox Code Playgroud)