Spring Boot使用application.yml配置日志记录

x33g5p2x  于2022-09-30 转载在 Spring  
字(3.2k)|赞(0)|评价(0)|浏览(1859)

Spring Boot允许你通过使用application.propertiesapplication.yml文件来外部化配置。在本教程中,我们将讨论如何用application.yml文件配置日志。

配置application.yml文件

在一个默认结构的Spring Boot网络应用中,你可以在resources文件夹下找到application.yml文件。

为了理解Spring Boot日志的工作原理,让我们考虑一个具有空的application.yml文件的应用程序。

private final Logger log = LoggerFactory.getLogger(this.getClass());

  @RequestMapping("/")
  public String home(Map<String, Object> model) {
    log.debug("This is a debug message");
    log.info("This is an info message");
    log.warn("This is a warn message");
    log.error("This is an error message");
    model.put("message", "Hello World!");
    return "index";

  }

然后,如果你启动Web应用程序,你会在控制台看到以下信息。

2018-06-02 23:33:51.318  INFO 3060 --- [nio-8080-exec-1] com.demo.IndexController       : info log statement printed
2018-06-02 23:33:51.319  WARN 3060 --- [nio-8080-exec-1] com.demo.IndexController       : warn log statement printed
2018-06-02 23:33:51.319 ERROR 3060 --- [nio-8080-exec-1] com.demo.IndexController       : error log statement printed

正如你所看到的,只有级别为INFO或更高的日志信息会被打印在控制台中。让我们在下一节中学习如何改变默认的日志级别。

设置Spring Boot日志级别

要为任何记录器设置不同的日志级别,请在你的application.yml文件中树下的logging > level添加日志级别。

日志级别可以是TRACEDEBUGINFOWARNERRORFATALOFF中的一种。在下面的application.ym中,我们将ROOT日志记录器配置为记录ERROR(或更高)信息和一些特定包的日志级别水平:``

logging:
  level:
    root: ERROR
    org.springframework.web: ERROR
    com.demo: DEBUG
    org.hibernate: ERROR

下面的日志将被打印出来。

2018-06-02 23:33:51.318  DEBUG 3060 --- [nio-8080-exec-1] com.demo.IndexController      : debug log statement printed
2018-06-02 23:33:51.318  INFO 3060 --- [nio-8080-exec-1] com.demo.IndexController       : info log statement printed
2018-06-02 23:33:51.319  WARN 3060 --- [nio-8080-exec-1] com.demo.IndexController       : warn log statement printed
2018-06-02 23:33:51.319 ERROR 3060 --- [nio-8080-exec-1] com.demo.IndexController       : error log statement printed

如何设置日志模式

要改变日志模式,使用logging.pattern.consolelogging.pattern.file键。

logging:
    pattern:
        console: %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        file: %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

在application.yml中做了上述改变后,你会在日志中看到以下输出。

2017-03-03 12:59:13 - This is a debug message
2017-03-03 12:59:13 - This is an info message
2017-03-03 12:59:13 - This is a warn message
2017-03-03 12:59:13 - This is an error message

记录到一个文件

要设置日志输出到一个文件,请使用logging > filelogging > path键,如下面的配置示例中。

logging:
    file: /logs/application-debug.log

使用活动配置文件来加载特定环境的日志配置

任何应用程序都希望有多个配置--每个配置都是针对特定的运行环境的。在spring boot中,你可以通过在application.yml文件的相同位置创建多个application-{profile}.yml文件来实现。

特定于配置文件的键总是优先于非配置文件的键。如果指定了几个配置文件,则适用最后的胜利策略。

如果我的应用程序有两个环境,即proddev。那么我将创建两个配置文件的yml文件。

application-dev.yml

logging:
  file: logs/application-debug.log
  pattern:
    console: "%d %-5level %logger : %msg%n"
    file: "%d %-5level [%thread] %logger : %msg%n"
  level:
    org.springframework.web: ERROR
    com.howtodoinjava: DEBUG
    org.hibernate: ERROR

application-prod.yml

logging:
  file: logs/application-debug.log
  pattern:
    console: "%d %-5level %logger : %msg%n"
    file: "%d %-5level [%thread] %logger : %msg%n"
  level:
    org.springframework.web: ERROR
    com.howtodoinjava: INFO
    org.hibernate: ERROR

为了向应用程序提供配置文件信息,密钥spring.profiles.active被传递给运行时。

$ java -jar -Dspring.profiles.active=prod spring-boot-demo.jar

彩色编码的日志输出

如果你的终端支持ANSI,将使用彩色输出来帮助阅读。你可以将spring.output.ansi.enabled值设置为ALWAYS, NEVERDETECT:

spring:
    output:
    ansi:
        enabled: DETECT

颜色编码是使用%clr转换字配置的。在其最简单的形式下,转换器将根据日志级别给输出着色。

FATAL 和 ERROR - 红色
WARN - 黄色
INFO、DEBUG和TRACE - 绿色

相关文章