📜  Spring Boot – 日志记录

📅  最后修改于: 2022-05-13 01:54:53.682000             🧑  作者: Mango

Spring Boot – 日志记录

任何软件项目都需要一个良好的日志记录基础设施,因为它不仅有助于了解应用程序正在发生的事情,而且还有助于跟踪项目中出现的任何异常事件或错误。本文介绍了通过简单的配置在 Spring Boot 项目中启用日志记录的几种方法。让我们首先进行初始设置以更深入地探索每个选项。

初始设置

为了使用 Spring Initializer 创建一个简单的 Spring Boot 项目,请参考这篇文章。让我们定义一个简单的 Rest Controller,它输出各种级别的日志消息。

Java
// Rest Controller to print various log level messages
package com.log.controller;
  
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
  
@RestController
public class LogController {
  
    // creating a logger
    Logger logger
        = LoggerFactory.getLogger(LogController.class);
  
    @RequestMapping("/log") public String log()
    {
        // Logging various log level messages
        logger.trace("Log level: TRACE");
        logger.info("Log level: INFO");
        logger.debug("Log level: DEBUG");
        logger.error("Log level: ERROR");
        logger.warn("Log level: WARN");
  
        return "Hey! You can check the output in the logs";
    }
}


XML


  
    
    
    
  
    
    
        
            
                %white(%d{ISO8601}) %highlight(%-5level) [%yellow(%t)] : %msg%n%throwable
            
        
    
  
    
    
        ${LOG_PATH}/${LOG_FILE_NAME}.log
        
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n
            
        
        
        
        
            ${LOG_PATH}/archived/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log
            
            
                10MB
            
        
    
  
    
    
        
        
    
      
    
     
        
        
    
      


XML

    org.springframework.boot
    spring-boot-starter-web
    
        
            org.springframework.boot
            spring-boot-starter-logging
        
    


    org.springframework.boot
    spring-boot-starter-log4j2


XML

  

  
    
     
    
    
    
      
    
    
        
            
        
  
        
        
            
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n
                
            
            
                
                
                
            
        
    
  
    
        
        
        
            
            
        
  
        
        
            
            
        
  
    
  


现在我们只需要运行应用程序并点击http://localhost:8080/log即可查看日志消息。

无配置的默认日志记录

Spring boot 允许我们在控制台中查看日志,即使我们没有为其提供任何特定配置。这是因为 Spring Boot 使用Logback作为其默认日志记录。 Spring boot 的内部日志提供程序是 A pache Commons ,它提供对Java Util LoggingLog4j2Logback的支持。因此 Apache Commons 必须手动导入,直到 spring boot 1.x。但是,从 spring boot 2.x 开始,它是通过传递下载的。更具体地说,Spring boot 启动器,例如spring-boot-starter-web导入spring-boot-starter-logging ,它会自动拉入 Logback。在运行应用程序并访问http://localhost:8080/log页面时,我们可以在控制台中看到以下输出:

日志格式和 ANSI 颜色由 Spring Boot 预先配置,以使日志记录更具可读性。日志输出中存在以下组件:

  1. 记录日期
  2. 毫秒精度的时间
  3. 日志级别默认显示 INFO、WARN 和 ERROR
  4. 进程 ID
  5. — 作为分隔符
  6. 方括号中的线程名称
  7. 显示源类名称的记录器的名称
  8. 日志消息

控制台输出

Spring boot 支持的日志级别是TRACEINFODEBUGERRORWARN 。默认情况下,ERROR、INFO 和 WARN 会打印到控制台。可以通过使用–debug标志或–trace标志启动应用程序来激活调试和跟踪级别,如下所示:

或者,这也可以通过在application.properties文件中添加以下属性来完成。

颜色编码输出

如果您的终端支持 ANSI,则可以在控制台中看到颜色编码的日志输出。可以在application.properties文件中设置以下属性以获取颜色编码的输出:

记录到文件

Spring boot 默认只记录到控制台。为了登录文件,需要将以下属性添加到application.properties文件中:

添加这些属性后,如果我们运行 spring boot 应用程序并访问页面http://localhost:8080/log ,我们可以在控制台和日志文件中看到日志。在当前路径中创建一个名为logs的新文件夹,在该文件夹中是名为application.log 的日志文件。日志文件内容如下:

使用 Logback 配置进行日志记录

Spring boot 允许以特定方式配置logback以满足我们项目的要求。为此,我们需要定义一个配置文件,我们可以在其中指定日志记录模式、颜色、文件日志记录和控制台日志记录的不同属性,以及有效的滚动策略以防止创建巨大的日志文件。每当 Spring boot 找到具有以下任何名称的文件时,它都会自动覆盖默认配置。

  • logback-spring.groovy
  • logback.groovy
  • logback-spring.xml
  • logback.xml

现在让我们创建一个简单的 logback-spring.xml 文件

XML



  
    
    
    
  
    
    
        
            
                %white(%d{ISO8601}) %highlight(%-5level) [%yellow(%t)] : %msg%n%throwable
            
        
    
  
    
    
        ${LOG_PATH}/${LOG_FILE_NAME}.log
        
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n
            
        
        
        
        
            ${LOG_PATH}/archived/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log
            
            
                10MB
            
        
    
  
    
    
        
        
    
      
    
     
        
        
    
      

在运行应用程序并访问页面http://localhost:8080/log 时,我们会收到以下控制台输出:

控制台输出与logback-spring.xml文件中定义的日志记录模式和颜色一致。在当前路径中的 /logs 文件夹中创建一个名为application-logback.log的新日志文件,该文件通过滚动策略存档。日志文件输出如下:

使用 Log4j2 配置进行日志记录

为了使用 log4j2,我们需要从我们的 starter 依赖中排除 Logback,并添加 log4j2 的依赖,如下所示:

XML


    org.springframework.boot
    spring-boot-starter-web
    
        
            org.springframework.boot
            spring-boot-starter-logging
        
    


    org.springframework.boot
    spring-boot-starter-log4j2

接下来,我们需要为 Log4j2 定义配置文件。当 spring boot 找到具有以下任何名称的文件时,它会自动覆盖默认配置。

  • log4j2-spring.xml
  • log4j2.xml

现在让我们创建一个简单的 log4j2-spring.xml 文件,如下所示:

XML


  

  
    
     
    
    
    
      
    
    
        
            
        
  
        
        
            
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n
                
            
            
                
                
                
            
        
    
  
    
        
        
        
            
            
        
  
        
        
            
            
        
  
    
  

在运行应用程序并访问页面http://localhost:8080/log时,我们会收到以下控制台输出:

控制台输出与logback-Log4j2.xml文件中定义的日志记录模式和颜色一致。一个名为application-Log4j2.log的新日志文件将在当前路径中的 /logs 文件夹中创建,该文件夹通过滚动策略进行归档。日志文件输出如下: