Java日志记录解释
这是我从未真正完全理解过的事情,我想知道是否有人能解释它 我有一个spring应用程序,使用hibernate。我有时在tomcat上运行,有时在jetty上运行。我从hibernate和spring获得日志输出。我知道在java日志记录方面有几种选择,例如java.logging、slf4j、log4j等;但我根本没有真正参与配置日志记录。现在我想配置ehcache的日志输出,我需要 我的问题是,在我的应用程序中,我如何知道它使用的是哪种日志记录,以及如何配置和微调它?它是否依赖于应用服务器?或者是spring或hibernate引入了自己的日志实现。通过查看我的maven依赖关系树,我可以看到hibernate validator引入了org.jboss.logging,spring需要commons日志。我也有slf4j,因为有几个软件包需要不同版本的slf4j,所以我手动引入了最新版本 Maven依赖项包括: 干杯,Java日志记录解释,java,spring,tomcat,logging,jetty,Java,Spring,Tomcat,Logging,Jetty,这是我从未真正完全理解过的事情,我想知道是否有人能解释它 我有一个spring应用程序,使用hibernate。我有时在tomcat上运行,有时在jetty上运行。我从hibernate和spring获得日志输出。我知道在java日志记录方面有几种选择,例如java.logging、slf4j、log4j等;但我根本没有真正参与配置日志记录。现在我想配置ehcache的日志输出,我需要 我的问题是,在我的应用程序中,我如何知道它使用的是哪种日志记录,以及如何配置和微调它?它是否依赖于应用服务器?
NVF并不像你想象的那么简单,仅仅列出maven依赖项是不够的。你必须打开你的类源代码,看看它使用了什么 以下类使用slf4j作为示例:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Foo {
private static final Logger logger = LoggerFactory.getLogger(Foo.class);
public void sayHello() {
logger.debug("hello");
...
}
...
}
但更复杂的是,slf4j是一个通用的日志框架,可以与log4j、java commons日志等一起使用
因此,是的,您可以在同一应用程序中使用不同的类使用不同的loggin框架。您还可以让您的webapp容器使用与您的webapp不同的日志框架。我的问题是,在我的应用程序中,我如何知道它使用的日志类型,以及如何配置和微调它? 首先,您应该注意到commons日志不是日志框架,它只是不同日志框架之间的桥梁/门面。因此,如果一个框架使用commons日志记录,那么您可以“配置”commons日志记录,将日志记录语句转发到一个真正的日志记录框架(log4j、slf4j、java日志记录…) 其次,您应该知道,如果一个框架(spring、hibernate,…)使用LoggingFrameworkX,那么您就不能对此进行修改。您需要提供该日志框架。但有一个诀窍 Slf4j提供了一个“替换”其他框架的技巧,假设:
- 您有一个框架X,它使用例如Log4j
- 但是,您的应用程序并不附带log4j,而是提供了另一个实现桥接模式的库(它具有与log4j相同的接口(接口和类),但在内部它将日志语句转发给slf4j。(例如:log4j-over-slf4j)
根据(google首次使用“Ehcache日志记录”时的提示),它使用slf4j。您可以通过运行调试器找到日志记录框架;)
这是一个解决问题的答案。太好了,谢谢。似乎ehcache核心依赖于commons日志记录和slf4j,所以我将首先检查它们。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Foo {
private static final Logger logger = LoggerFactory.getLogger(Foo.class);
public void sayHello() {
logger.debug("hello");
...
}
...
}