繁体   English   中英

使用 jdk 进行 slf4j 日志记录 – 如何启用调试?

[英]slf4j logging with jdk – how to enable debug?

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

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

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

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

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

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

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

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

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


供你参考:

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

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

static {

    System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");
}

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

我只是将我的 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 手册

如果您使用的是 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

在运行时使用默认配置,您可以使用以下代码启用它:

public class MyTest {

static {
    Logger rootLogger = Logger.getLogger("");
    rootLogger.setLevel(Level.ALL);
    rootLogger.getHandlers()[0].setLevel(Level.ALL);

}

我在TestNG单元中使用此代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM