Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日志记录解释_Java_Spring_Tomcat_Logging_Jetty - Fatal编程技术网

Java日志记录解释

Java日志记录解释,java,spring,tomcat,logging,jetty,Java,Spring,Tomcat,Logging,Jetty,这是我从未真正完全理解过的事情,我想知道是否有人能解释它 我有一个spring应用程序,使用hibernate。我有时在tomcat上运行,有时在jetty上运行。我从hibernate和spring获得日志输出。我知道在java日志记录方面有几种选择,例如java.logging、slf4j、log4j等;但我根本没有真正参与配置日志记录。现在我想配置ehcache的日志输出,我需要 我的问题是,在我的应用程序中,我如何知道它使用的是哪种日志记录,以及如何配置和微调它?它是否依赖于应用服务器?

这是我从未真正完全理解过的事情,我想知道是否有人能解释它

我有一个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依赖项包括: 干杯,
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)
有了这个技巧,您可以将来自不同框架的所有日志语句统一起来,这些框架被实现为使用不同的loggingframeworks到一个日志框架

顺便说一句:您应该知道Slf4j本身只是一个门面/桥接器,类似于commons日志: -您可以将日志语句转发到所需的特殊日志框架 -或本机实现回写

我强烈建议您阅读和

是否取决于应用服务器? 我只能为Tomcat说话(您提到过):默认情况下,Tomcat不为您的应用程序提供日志框架

顺便说一句:Tomcat是一个Servletcontainer,没有应用服务器



根据(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");
    ...
  }

  ...
}