默认情况下,slf4j 与 jdk ( slf4j-jdk14-1.6.1.jar ) 一起使用时,不会记录调试消息。如何启用它们?
我在官方文档、网络或此处都找不到有关如何启用它的信息。
我找到了一些关于(虽然失败)在 %JDK_HOME%/lib 中创建文件并在配置文件中定义级别的信息。但是,我想在编译/运行时定义级别,这样我就可以从具有不同日志级别的 IDE 运行和调试我的应用程序。
是不是有一些我可以设置的环境变量或VM arg?
默认情况下,slf4j 与 jdk ( slf4j-jdk14-1.6.1.jar ) 一起使用时,不会记录调试消息。如何启用它们?
我在官方文档、网络或此处都找不到有关如何启用它的信息。
我找到了一些关于(虽然失败)在 %JDK_HOME%/lib 中创建文件并在配置文件中定义级别的信息。但是,我想在编译/运行时定义级别,这样我就可以从具有不同日志级别的 IDE 运行和调试我的应用程序。
是不是有一些我可以设置的环境变量或VM arg?
为什么你认为它不记录 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 文件来配置的。
供你参考:
如果您使用的是 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 文件对于创建各种记录器和处理程序很有用,让您可以细粒度地控制哪些日志进入控制台,哪些日志进入文件:。
如果您使用的是 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