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

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

阅读剩余 66%

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

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

相关文章

  • 详解如何探测小程序返回到webview页面

    探测小程序返回到webview页面主要有两个部分:小程序侧的操作和webview侧的操作。 小程序侧的操作 步骤一:调用小程序JSAPI 小程序提供了navigateBackMiniProgram的JSAPI,可以在小程序内部调用,从而返回webview页面。 wx.navigateBackMiniProgram({ success: function() …

    Java 2023年5月23日
    00
  • jsp实现简单验证码的方法

    下面是jsp实现简单验证码的方法的完整攻略。 一、什么是验证码 验证码是防止恶意程序自动请求的一种服务端验证机制。常见的验证码有数字、字母、图形等形式,用户需要正确输入验证码才能完成相关操作。 二、实现简单验证码的方法 1. 生成随机验证码 在jsp页面中,我们可以通过以下代码生成一个4位数的随机验证码: <% String code = "…

    Java 2023年6月15日
    00
  • JAVA十大排序算法之堆排序详解

    JAVA十大排序算法之堆排序详解 什么是堆排序 堆排序是一种经典的排序算法,在java的Collections.sort()方法中也采用了堆排序的实现方式。堆排序的基本思想是将待排序的序列视为一棵完全二叉树,每个节点的关键字都不大于(或不小于)其子节点的关键字,然后构建大(小)顶堆,最后依次取出堆顶元素并删除。 堆排序的原理 1.构建堆 堆排序首先需要将待排…

    Java 2023年5月19日
    00
  • 浅谈jsp文件和HTML互相引入的乱码问题

    来讲解一下如何解决jsp文件和HTML互相引入的乱码问题。 1. 问题背景 在jsp文件中,我们经常需要嵌入html页面,即在jsp文件中引入html文件。但是在引入的过程中,经常会出现乱码的情况。 比如,在一个jsp文件中引入一个html文件: <%@ page contentType="text/html;charset=UTF-8&qu…

    Java 2023年5月20日
    00
  • Ajax实现注册并选择头像后上传功能

    下面我将详细讲解“Ajax实现注册并选择头像后上传功能”的完整攻略。 实现步骤 1. 注册功能 首先,在前端页面中设计一个注册表单,表单中包含必要的字段,例如“用户名”、“密码”、“邮箱”等。当用户填写完表单后,通过Ajax将表单数据提交到后台进行处理。后台需要对用户提交的信息进行验证,例如判断用户名是否已存在、判断邮箱格式是否正确等等。若验证通过,则在后台…

    Java 2023年6月15日
    00
  • Java JSON转成List结构数据

    下面我将详细讲解Java中如何将JSON转成List结构数据的完整攻略。 环境准备 首先需要引入相关依赖包,可以使用Maven管理依赖,将以下代码添加到项目根目录下的pom.xml文件中: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…

    Java 2023年5月26日
    00
  • jsp+mysql实现网页的分页查询

    好的。要详细讲解“jsp+mysql实现网页的分页查询”的完整攻略,需要了解以下几个步骤。 第一步:建立数据库 首先,在mysql中建立我们需要的数据库,并创建一个表来存储数据。例如,创建一个学生表students,表中包括学号、姓名、性别、年龄等字段。 表的创建语句如下: CREATE TABLE `students` ( `id` int(11) NOT…

    Java 2023年6月15日
    00
  • java定时任务的实现方法

    下面是针对”Java定时任务的实现方法”的详细攻略,主要介绍如何使用Java实现定时任务。 什么是定时任务? 定时任务是指在预定时期或时间,按照一定轨迹执行一些预定的操作或服务。 Java中实现定时任务的方法 1. Timer类 Java中提供了java.util.Timer类,它可以帮助我们实现简单的定时任务。 public class TimerTask…

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