如何更改 slf4j 日志级别

问题描述 投票:0回答:3

我在 glassfish 3.1.2 服务器上运行的 Java EJB 项目中使用 org.slf4j.Logger。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class main {

private static final Logger LOGGER = LoggerFactory.getLogger(main.class);

public static void main(String[] args) {
  LOGGER.info("--- show this everytime");
  if(LOGGER.isDebugEnabled()) {
        LOGGER.debug("--- show this only if debug is enable");
  }
  LOGGER.info("--- show this everytime");
}

所以我的问题是,我不知道如何打开/关闭不同的日志级别(信息、调试、错误、跟踪、警告)。我读到有关创建配置文件或 xml 文件的内容,但我不知道将这些文件放在 EJB 项目中的何处。 有没有办法这样配置?

LOGGER.setLevel("info");
java logging ejb slf4j
3个回答
15
投票

我找到了解决方案。我可以使用以下行更改日志记录级别:

System.setProperty(org.slf4j.impl.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Info");

我还必须将 slf4j-api-1.7.25.jar 和 slf4j-simple-1.7.25.jar 添加到构建路径,并将 jar 添加到 glassfish 库。

完整的代码如下所示:

import org.slf4j.LoggerFactory;

public class main {

public static void main(String[] args) {

   System.setProperty(org.slf4j.impl.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Info");
   final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(LogTest.class);

   LOGGER.info("--- show this everytime");
   if(LOGGER.isDebugEnabled()) {
        LOGGER.debug("--- show this only if debug is enable");
   }

   LOGGER.info("--- show this everytime");
}

6
投票

.properties
文件

你说:

我读到了有关创建配置文件或 xml 文件的内容,但我不知道将这些文件放在 EJB 项目中的何处。

您可以为记录器创建一个

.properties
文件。该文件必须适当地出现在类路径中。

在 Maven 驱动的基于 Servlet 的项目(Vaadin 14 项目)中,我放置了一个包含此内容的

simplelogger.properties
文件(Atmosphere 是 Vaadin 使用的库)用于 SimpleLogger 实现:

org.slf4j.simpleLogger.defaultLogLevel = error
org.slf4j.simpleLogger.log.org.atmosphere = warn

…在我的 IntelliJ 项目的

resources
文件夹中。

在构建时创建的

target
中,此文件出现在:
myProjectName
>
WEB-INF
>
classes
>
simplelogger.properties

该项目针对 web 容器,例如 Eclipse Jetty 或 Apache Tomcat。我不使用像 Glassfish 这样的完整 EJB 服务器。不确定这是否对您有帮助,但可能会给您提供线索。


0
投票

要为特定类设置 Logger 级别,这取决于您如何初始化它。

在我的例子中,我仅通过字符串初始化记录器名称:

logger = LoggerFactory.getLogger("MetricsService");

所以在

application.properties
我必须使用:
logging.level.MetricsService=DEBUG

但是如果您使用第二种方法:像这样:

logger = LoggerFactory.getLogger(MetricsService.class);
所以您应该提供完全限定的路径

© www.soinside.com 2019 - 2024. All rights reserved.