28

默认情况下,slf4j 与 jdk ( slf4j-jdk14-1.6.1.jar ) 一起使用时,不会记录调试消息。如何启用它们?

我在官方文档、网络或此处都找不到有关如何启用它的信息。

我找到了一些关于(虽然失败)在 %JDK_HOME%/lib 中创建文件并在配置文件中定义级别的信息。但是,我想在编译/运行时定义级别,这样我就可以从具有不同日志级别的 IDE 运行和调试我的应用程序。

是不是有一些我可以设置的环境变量或VM arg?

4

5 回答 5

26

为什么你认为它不记录 DEBUG 消息?

如果您的意思是您的log.debug(String)日志记录调用不会最终出现在java.util.logging日志文件中,那么我想您必须配置logging.properties配置文件以允许FINE级别的日志消息。

如果您不想弄乱 global %JRE_HOME%/lib/logging.properties,那么您可以在-Djava.util.logging.config.file=logging.properties命令行中传入 - 这将强制日志系统在当前目录中查找该配置文件。

或使用其他(编程)方式进行配置java.util.logging,请参阅下面的教程。

这与配置 SLF4J 无关;事实上,SLF4J 没有任何配置,一切都是通过简单的交换 JAR 文件来配置的。


供你参考:

于 2010-11-25T16:04:40.170 回答
13

如果您使用的是 slf4j SimpleLogger 实现,请阅读此内容

在那里您可以看到将其simpleLogger用作INFO默认日志级别。您可以使用系统属性对其进行更改。这对于非生产环境很有用:

static {

    System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");
}
于 2015-08-26T16:41:06.380 回答
8

您可以添加-Dorg.slf4j.simpleLogger.defaultLogLevel=debug到 VM 选项。

于 2020-03-07T13:36:41.987 回答
4

我只是将我的 logging.properties 文件放在我的应用程序 WEB-INF/classes 文件中(或者如果您没有在战争中部署,则使用由 Neeme Praks 标识的命令行参数),并在 eclipse 中打开属性文件,这样我就可以对其进行微调以记录包和我感兴趣的级别。

在 logging.properties 文件中,您需要确保记录器级别和处理程序级别都设置为您想要的级别。例如,如果您希望输出到控制台,您至少需要具备以下条件:

#logging.properties file contents

#Define handlers
handlers=java.util.logging.ConsoleHandler

#Set handler log level
java.util.logging.ConsoleHandler.level=FINE

#Define your logger level
com.company.application.package.package.level=FINE

#Assign your handler to your logger
com.company.application.package.package.handlers=java.util.logging.ConsoleHandler

你提到了slf4j-jdk14-1.6.1.jar. 这提供了与 java.util.logging 的 slf4j 绑定。你需要在你的类路径中拥有它,但要确保你的类路径中也有 slf4j api ( slf4j-api-1.7.12.jar)。

我发现此链接中的示例 logging.properties 文件对于创建各种记录器和处理程序很有用,让您可以细粒度地控制哪些日志进入控制台,哪些日志进入文件:。

是 slf4j 手册

于 2015-06-07T18:38:47.303 回答
0

如果您使用的是 lombok Slf4j

 package com.space.slf4j;

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    /**
     * @author anson
     * @date 2019/6/18 16:17
     */
    @Slf4j
    @RestController
    public class TestController {

        @RequestMapping("/log")
        public String testLog(){
            log.info("#########  info  #########");
            log.debug("#########  debug  #########");
            log.error("#########  error  #########");
            return null;
        }
    }

应用程序.yml

logging:
   level:
      root: debug
于 2019-07-22T04:44:52.290 回答