【问题标题】:Spring boot logger logs nothingSpring Boot 记录器不记录任何内容
【发布时间】:2017-11-27 04:12:00
【问题描述】:

我使用 Spring Boot (1.5.8.RELEASE) 创建了一个 Spring MVC 项目。我选择了 web、jpa 和 mysql,并在我的 build.gradle 中完全没有添加任何内容。

这是我application.yml的相关部分:

logging:
  level: trace

这就是关于日志的所有配置。我只想在控制台中显示日志消息,所以我只是省略了logging.path

我有控制器

package com.example.controllers;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// other imports ...

@RestController
@RequestMapping("/")
public class DummyController {

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

  @GetMapping
  public void foo() {
    LOGGER.info("foo");
  }
}

当我向/ 发送请求时,我收到200 OK 响应,但日志中没有任何内容。奇怪的是,Spring 框架和 Hibernate 的日志消息确实出现在控制台中。只是我的临时日志消息丢失了。

然后我调试了我的代码,发现LOGGER(记录器树的根)的祖先是一个日志级别为INFO的记录器。那显然不是我配置的记录器。但是,Spring 的官方文档并没有告诉我如何获取我想要的 logger 实例。我怎样才能做到这一点?我的代码有问题,还是我错过了配置中的某些内容?

【问题讨论】:

    标签: spring-boot logging


    【解决方案1】:

    official documentation 很简单,可以使用logging.level.root 配置根记录器。但您实际上可以为每个包/类单独配置日志记录

    logging.level.root=TRACE                     # default for everything
    logging.level.com.example.controllers=TRACE  # for your controllers package
    

    类似的application.yml:

    logging:
     level:
       root: TRACE 
       com.example.controllers: TRACE 
    

    【讨论】:

    • 那么如何在我的Java代码中获取logger实例呢?该页面上甚至没有一行 Java 代码。
    • hm,你的代码对我来说看起来不错,你接近 private static final Logger LOGGER = LoggerFactory.getLogger(DummyController.class); 为你提供了实例和推荐的方法。感觉有点明显,所以可能我错过了一些东西。而且我认为在上面显示的代码中,任何记录器都应该打印logger.info() 消息,因此无论您使用哪种记录杆,您都应该看到foo。我刚刚在新项目中检查了这个
    • @Aetherus 你确定你的项目中没有docs.spring.io/spring-boot/docs/current/reference/html/… 任何其他日志文件吗? Spring docs 中没有 java 代码,因为您实际上使用的是 Logback + slf4j logback.qos.ch/manual/introduction.html Spring docs 中的第一行声明您可以选择一个预配置的记录器,因此复制每个记录器文档没有意义。我的回答只是指出你的 yaml 无效,这就是为什么你有默认的 INFO 根记录器父级
    • 没关系。我刚刚发现logging.level = trace 不足以设置我项目中所有包的所有日志记录级别。例如,JPA 实体类的日志记录级别保持为INFO 与我的原始配置。我手动为每个班级设置了级别,并且效果很好。只是想知道为什么这些类中的记录器不尊重全局配置。
    【解决方案2】:

    如果您查看以下链接 http://www.slf4j.org/api/org/apache/log4j/Level.html

    TRACE 级别低于 INFO,您正在尝试记录信息,因此您看不到日志

    logging.level.com.abc.app=DEBUG
    

    com.abc.app 是应用程序的根目录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-01
      • 2013-11-24
      • 2021-02-04
      • 2020-06-30
      • 2014-02-11
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      相关资源
      最近更新 更多