Spring Boot application.properties 中的日志级别问题

Posted

技术标签:

【中文标题】Spring Boot application.properties 中的日志级别问题【英文标题】:Issues with Log Levels in Spring Boot application.properties 【发布时间】:2016-07-17 01:06:47 【问题描述】:

我在 Spring Boot 应用程序中使用 Log4J 2,并尝试通过 application.properties 配置一些基本的日志记录选项。

我已经在我的控制器类中设置了一个记录器,就像这样。

package guru.springframework.controllers;
- - - -
@Controller
public class IndexController 
  private final Logger logger = LoggerFactory.getLogger(this.getClass());
  @RequestMapping("/")
  String index()
    logger.debug("This is a debug message");
    logger.info("This is an info message");
    logger.warn("This is a warn message");
    logger.error("This is an error message");
    return "index";
   

在 application.properties 中,我有以下属性。

logging.level.guru.springframework.controllers=DEBUG
logging.level.org.springframework.web=INFO
logging.file=logs/spring-boot-logging.log

当我启动应用程序时,在控制台中以 INFO 级别记录 Spring 内部 logging 消息。这是 logging.level.org.springframework.web 属性所期望的。然而,当控制器被调用时,只有 info() 和更低的消息被记录。 logging.level.guru.springframework.controllers 属性设置为 DEBUG,为什么没有记录 debug() 方法的消息。如果我将以下内容添加到 application.properties。

logging.level.root=ERROR

现在,在 Spring 启动时不会向控制台发送任何消息(显然这次错误级别已被拾取)。同样,控制器只发出 error() 方法消息。那么,从 application.properties 中获取级别是否有任何特定的优先级。

有没有办法为不同的包(比如控制器包)设置不同的级别,独立于为 logging.level.rootlogging.level.org 指定的级别application.properties 中的 .springframework.web

我不想使用任何其他外部配置文件。

【问题讨论】:

它适用于我通过 SLF4J 以 Log4j2 作为后端进行日志记录。你能分享一个演示这个问题的最小例子吗? @Andy 它是一个 Spring Boot Web 应用程序。它在:github.com/ximanta/springbootwebapp-part2 【参考方案1】:

您使用的是旧版本的 Spring Boot (1.2.4.RELEASE),其中包含 a bug。它已在 1.2.6.RELEASE 中修复,但我建议升级到 1.2.8.RELEASE(如果您需要坚持使用 1.2.x),或者更好的是升级到 1.3.3.RELEASE(最新版本)写作时间)。您可以通过更新您在项目的 pom 中使用的 spring-boot-starer-parent 的版本来升级:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

【讨论】:

这正是问题所在。谢谢。

以上是关于Spring Boot application.properties 中的日志级别问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot REST 应用程序中重用类?

springboot初学---使用redis

Spring Boot 学习例子

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》