Spring Boot日志的打印与持久化详细解析

yizhihongxing

Spring Boot日志的打印与持久化详细解析

在Spring Boot应用中,日志是开发和调试的重要工具。通过合理的配置,我们可以实现日志的打印和持久化,方便问题的排查和解决。本文将详细介绍Spring Boot日志的打印与持久化,并包含两条示例。

Spring Boot日志的分类

Spring Boot日志分为如下五个级别:

  • TRACE:跟踪级别,最低级别,用于记录最详细的日志信息。
  • DEBUG:调试级别,用于记录程序运行细节,适合于在开发环境中使用。
  • INFO:普通日志级别,用于记录程序正常的运行状态,不影响程序的运行。
  • WARN:警告级别,用于记录一些较小的异常,不影响程序的稳定性,但需要注意。
  • ERROR:错误级别,用于记录较严重的异常,需要针对性的解决。

在应用的开发和调试过程中,我们可以根据具体需求选择日志级别。

Spring Boot日志的配置

Spring Boot采用了通用的日志接口——SLF4J(Simple Logging Facade for Java)作为业务代码和特定日志实现之间的中间层。因此,在引入Spring Boot日志功能时,我们需要引入如下两个依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

其中,spring-boot-starter为Spring Boot核心依赖,spring-boot-starter-log4j2为Log4j2的具体实现。

在引入依赖之后,我们需要在application.properties文件中,进行日志配置。例如,我们可以设置日志级别为DEBUG,将日志输出到控制台:

logging.level.root=DEBUG
logging.pattern.console=%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg%n

其中,logging.level.root设置根日志的日志级别,logging.pattern.console设置日志输出到控制台时的格式。

Spring Boot日志的持久化配置

除了控制台输出,我们还可以将日志持久化到文件中。例如,我们可以将日志存储到logs目录下的spring-boot-log.log文件中:

logging.file=logs/spring-boot-log.log
logging.level.root=DEBUG
logging.pattern.console=%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg%n

示例一

下面是一个示例,用于记录用户的登录日志。我们可以使用Log4j2记录用户的登录事件,将其存储到日志文件中。

@RestController
public class UserController {
    private final Logger logger = LogManager.getLogger(UserController.class);
    //省略其他代码

    @PostMapping("/login")
    public CommonResponse<User> login(@RequestBody UserLoginRequest request) {
        User user = //从数据库中查询用户信息
        if(user != null && user.getPassword().equals(request.getPassword()) {
             logger.info("用户登录成功,用户名为{}", user.getUserName());
             return new CommonResponse<>(user);
        }else {
             logger.error("用户登录失败,用户名为{}", request.getUserName());
             throw new BusinessException("用户名或密码错误");
        }
    }
}

上述代码中,我们使用LogManager获取到UserController的Logger实例,并在用户登录时,使用logger记录用户登录成功和失败的事件。使用如下配置文件,将日志记录到logs/user.log文件中:

logging.level.root=INFO
logging.file=logs/user.log
logging.pattern.console=%d{HH:mm:ss.SSS}[%thread]%highlight(%-5level)%logger{36} - %msg%n

示例二

下面是一个示例,用于记录系统的异常日志。我们可以使用Logback记录Java异常,并将其存储到日志文件中。需要注意的是:在开发和测试环境中,我们可以把异常详细信息输出到控制台,方便问题的排查和解决;而在生产环境中,我们应该避免在控制台输出详细的异常信息,以保证系统的安全性。

@ControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    //省略其他代码

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public CommonResponse<?> handleException(Exception e){
        String errorMessage = "未知异常,请联系管理员";
        if(e instanceof BusinessException){
            BusinessException be = (BusinessException) e;
            errorMessage = be.getMessage();
        }
        logger.error(errorMessage, e); //记录异常日志,注意参数顺序,errorMessage在前,异常对象在后
        return new CommonResponse<>(ResultCode.SYSTEM_ERROR.getCode(), errorMessage);
    }
}

上述代码中,我们使用LoggerFactory获取到GlobalExceptionHandler的Logger实例,并在捕获到异常时,使用logger记录异常日志。使用如下配置文件,将异常信息记录到logs/exception.log文件中:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/exception.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/exception-%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appenderRef ref="console"/>
        <appenderRef ref="dailyRollingFileAppender"/>
    </root>
</configuration>

总结

本文介绍了Spring Boot日志的打印和持久化,分别针对不同的应用场景进行了示例说明。在实际应用中,我们应该根据具体需求,选择合适的日志级别,并将日志合理配置,以便于开发和调试。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot日志的打印与持久化详细解析 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • J2ME/J2EE实现用户登录交互 实现代码

    J2ME和J2EE都是Java程序开发的重要领域,其中J2EE是面向企业级应用开发的,而J2ME则是面向移动设备的小型Java平台。在开发应用程序时,用户登录交互是不可或缺的一个功能,本文将讲解如何使用J2ME和J2EE实现用户登录交互,并提供两个示例。 J2ME实现用户登录交互 J2ME的用户界面开发常用的框架是MIDP(Mobile Informatio…

    Java 2023年6月15日
    00
  • Eclipse代码格式化设置简单介绍

    下面我将详细讲解“Eclipse代码格式化设置简单介绍”的完整攻略,包括操作步骤和示例说明。 简介 在编写代码的过程中,代码的格式化会对阅读和后期维护带来很大的影响,因此,我们应该保证代码格式的规范性和统一性。Eclipse提供了一系列的代码格式化设置,可以方便地帮助我们格式化代码。 操作步骤 以下是Eclipse代码格式化设置的操作步骤: 打开Eclips…

    Java 2023年6月15日
    00
  • Jsp真分页实例—分页

    JSP真分页实现需要使用Java语言和JSP技术。具体实现步骤如下: 步骤一:获取数据并计算总页数 首先,我们需要从数据库或后台获取数据并计算出总页数。我们可以通过以下代码实现: <% // 每页显示10条数据 int pageSize = 10; // 当前页码 int currentPage = Integer.parseInt(request.g…

    Java 2023年6月15日
    00
  • java使用websocket,并且获取HttpSession 源码分析(推荐)

    Java使用WebSocket并获取HttpSession的攻略 WebSocket是一种双向通信协议,能够建立客户端和服务端之间的实时通信通道。本攻略将详细讲解Java如何使用WebSocket并获取HttpSession,步骤如下: 步骤1:添加依赖 在项目的pom.xml文件中添加以下依赖: <dependency> <groupId…

    Java 2023年5月23日
    00
  • Java图论进阶之最小生成树算法详解

    Java图论进阶之最小生成树算法详解 在图论中,最小生成树(Minimum Spanning Tree, MST) 是连接所有图节点的一棵树,其边的权重和最小。本文将介绍最常见的两种求最小生成树的算法——Prim算法和Kruskal算法。 Prim算法 Prim算法以一个初始节点为起点,每次选择距离该节点最近的未访问节点加入生成树中,直至生成一棵生成树,时间…

    Java 2023年5月19日
    00
  • 使用sharding-jdbc实现水平分库+水平分表的示例代码

    使用 Sharding-JDBC 实现水平分库+水平分表的步骤如下: 1. 创建共享库(shared database)的配置文件 定义数据库名称以及访问方式,如 JDBC URL,数据源等,同时还需要指定共享库所要分片策略和插件配置。 示例代码如下: # shardingsphere datasource config spring: sharding: …

    Java 2023年5月20日
    00
  • mvn compile报错“程序包com.XXX不存在”

    当使用mvn compile命令对Maven项目进行编译时,可能会出现错误提示“程序包com.XXX不存在”的情况。这种错误的产生通常是由于以下两种情况之一: 需要的依赖没有正确添加 本地仓库中缺失相应的依赖包 为了解决这个问题,可以采取以下步骤: 步骤一:确认依赖是否已正确添加 首先需要确认Maven项目的pom.xml文件中是否正确添加了需要的依赖。可以…

    Java 2023年6月2日
    00
  • Java读写.properties文件解决中文乱码问题

    下面是我为您提供的Java读写.properties文件解决中文乱码问题的攻略。 1. 问题描述 Java读写.properties文件时,当文件中包含中文时,可能会出现中文乱码问题,这给读取文件内容和使用时带来不便。 2. 解决方案 Java读写.properties文件时,可以采用以下两种方式解决中文乱码问题: 2.1 使用UTF-8编码方式 在读写文件…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部