SpringBoot使用Logback进行日志记录的代码示例

 更新时间:2023年06月26日 09:09:55   作者:程序媛徐师姐  
在开发Web应用程序时,日志记录是非常重要的一部分,在SpringBoot中,我们可以使用Logback进行日志记录,Logback是一款高性能、灵活的日志框架,它可以满足各种不同的日志需求,在本文中,我们介绍了如何在SpringBoot中使用Logback进行日志记录

SpringBoot 如何使用 Logback 进行日志记录

Logback 简介

Logback 是由 log4j 的作者 Ceki Gülcü 开发的,是一款开源的、高性能的日志框架。它是 log4j 的后继者,相比于 log4j,Logback 具有更快的速度、更低的内存消耗、更多的特性和更好的可扩展性。在 SpringBoot 中,Logback 是默认的日志框架,因此我们可以直接使用它进行日志记录。

Logback 的优点

  1. 高性能:Logback 使用异步方式进行日志记录,能够提高日志记录的性能。
  2. 灵活:Logback 提供了丰富的配置选项,可以满足各种不同的日志需求。
  3. 可扩展:Logback 提供了插件机制,可以轻松地扩展日志功能。
  4. 易用性:Logback 的配置非常简单,易于上手。

在 SpringBoot 中使用 Logback

在 SpringBoot 中,我们可以使用 Logback 进行日志记录,下面介绍如何在 SpringBoot 中使用 Logback 进行日志记录。

添加依赖

首先,我们需要在 pom.xml 文件中添加 Logback 的依赖:

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
</dependency>

配置 Logback

在 SpringBoot 中,Logback 的配置文件名为 logback-spring.xml,它应该位于 src/main/resources 目录下。下面是一个简单的 Logback 配置文件示例:

<configuration>
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="info">
    <appender-ref ref="CONSOLE" />
  </root>
</configuration>

上面的配置文件定义了一个名为 CONSOLE 的控制台输出的 Appender,它定义了一个输出格式,包括时间戳、线程名、日志级别、类名和日志内容。然后将这个 Appender 附加到根 Logger 上,设置日志级别为 info

在代码中使用 Logback

在代码中使用 Logback 非常简单,我们可以使用 org.slf4j.Logger 接口来进行日志记录,例如:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    @RequestMapping("/hello")
    public String hello() {
        logger.info("hello");
        return "hello";
    }
}

上面的代码中,我们使用 LoggerFactory.getLogger() 方法来获取一个 Logger 对象,然后使用 logger.info() 方法来进行日志记录。

配置日志级别

在 Logback 中,日志级别有以下几种:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR

在实际开发中,我们可以根据需要设置不同的日志级别。例如,我们可以将日志级别设置为 DEBUG,这样就可以输出更详细的日志信息。在 Logback 的配置文件中,可以通过以下方式设置日志级别:

<root level="debug">
  <appender-ref ref="CONSOLE" />
</root>

上面的配置文件将日志级别设置为 debug,这样就可以输出所有级别的日志信息。

配置日志文件

除了将日志输出到控制台外,我们还可以将日志输出到文件中。在 Logback 中,可以使用 FileAppender 将日志输出到文件中。下面是一个将日志输出到文件的 Logback 配置文件示例:

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>/var/log/myapp.log</file>
    <append>true</append>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="info">
    <appender-ref ref="FILE" />
  </root>
</configuration>

上面的配置文件定义了一个名为 FILE 的 Appender,它将日志输出到文件 /var/log/myapp.log 中,并且设置了一个输出格式,包括时间戳、线程名、日志级别、类名和日志内容。然后将这个 Appender 附加到根 Logger 上,设置日志级别为 info

配置日志滚动

当日志文件变得越来越大时,我们需要将其滚动到另一个文件中,以防止日志文件过大。在 Logback 中,可以使用 RollingFileAppender 将日志输出到滚动文件中。下面是一个将日志输出到滚动文件的 Logback 配置文件示例:

<configuration>
  <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/var/log/myapp.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <fileNamePattern>/var/log/myapp.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
      <maxFileSize>10MB</maxFileSize>
      <maxHistory>30</maxHistory>
      <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="info">
    <appender-ref ref="ROLLING_FILE" />
  </root>
</configuration>

上面的配置文件定义了一个名为 ROLLING_FILE 的滚动文件输出的 Appender,它将日志输出到文件 /var/log/myapp.log 中,并且设置了一个滚动策略,当日志文件大小达到 10MB 或者到达 yyyy-MM-dd 的新一天时,将日志滚动到新的文件中,并且保留 30 个历史日志文件,总大小不超过 1GB。然后将这个 Appender 附加到根 Logger 上,设置日志级别为 info

使用 MDC 进行日志追踪

在实际开发中,我们通常需要对请求进行跟踪,以便查找问题。在 Logback 中,使用 MDC(Mapped Diagnostic Context)可以很方便地进行日志追踪。MDC 是一个键值对的集合,可以存储与当前线程相关联的上下文信息。下面是一个使用 MDC 进行日志追踪的示例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    @RequestMapping("/hello")
    public String hello() {
        MDC.put("requestId", UUID.randomUUID().toString());
        logger.info("hello");
        MDC.remove("requestId");
        return "hello";
    }
}

上面的代码中,我们使用 MDC.put() 方法将一个 UUID 存储到 MDC 中,然后使用 logger.info() 方法进行日志记录。在日志输出中,我们可以使用 %X{requestId} 来获取 MDC 中的值,例如:

2023-06-23 10:30:45.123 [http-nio-8080-exec-1] INFO  com.example.demo.HelloController - hello [requestId=ee7bda1b-1c1a-4a47-a7b2-8478a0cb3a1d]

上面的日志输出中,requestId 的值是从 MDC 中获取的。

使用 Logback 进行异常处理

在实际开发中,我们需要对异常进行处理,以便及时发现和修复问题。在 Logback 中,可以使用 %ex 或 %rEx 输出异常的堆栈信息。下面是一个使用 Logback 进行异常处理的示例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    @RequestMapping("/hello")
    public String hello() {
        try {
            int i = 1 / 0;
        } catch (Exception e) {
            logger.error("hello error", e);
        }
        return "hello";
    }
}

上面的代码中,我们使用 try...catch 块捕获异常,并使用 logger.error() 方法进行日志记录。在日志输出中,我们可以看到异常的堆栈信息,例如:

2023-06-23 10:30:45.123 [http-nio-8080-exec-1] ERROR com.example.demo.HelloController - hello error
java.lang.ArithmeticException: / by zero
        at com.example.demo.HelloController.hello(HelloController.java:14) ~[classes/:na]
        ...

上面的日志输出中,可以看到异常的堆栈信息被输出到日志中。

总结

Logback 是一款高性能、灵活的日志框架,它可以满足各种不同的日志需求。在 SpringBoot 中,Logback 是默认的日志框架,我们可以直接使用它进行日志记录。在本文中,我们介绍了如何在 SpringBoot 中使用 Logback 进行日志记录,包括添加依赖、配置 Logback、在代码中使用 Logback、配置日志级别、配置日志文件、配置日志滚动、使用 MDC 进行日志追踪、使用 Logback 进行异常处理等方面。希望本文能够帮助大家更好地使用 Logback 进行日志记录。

以上就是SpringBoot使用Logback进行日志记录的代码示例的详细内容,更多关于SpringBoot Logback日志记录的资料请关注脚本之家其它相关文章!

相关文章

  • Servlet3.0新特性全解

    Servlet3.0新特性全解

    Servlet3.0新特性有异步处理支持、新增的注解支持、可插性支持,下面我们将逐一讲解这些新特性,通过下面的学习,读者将能够明晰了解Servlet 3.0的变化,并能够顺利使用它进行日常的开发工作
    2023-05-05
  • Spring Boot日志基础使用之如何设置日志级别

    Spring Boot日志基础使用之如何设置日志级别

    这篇文章主要介绍了Spring Boot日志基础使用设置日志级别的方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • SpringBoot引入Redis报Redis command timed out两种异常情况

    SpringBoot引入Redis报Redis command timed out两种异常情况

    这篇文章主要给大家介绍了关于SpringBoot引入Redis报Redis command timed out两种异常情况的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 快速了解Java中NIO核心组件

    快速了解Java中NIO核心组件

    这篇文章主要介绍了快速了解Java中NIO核心组件,涉及相关介绍及完整实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 使用Idea或Datagrip导入excel数据的方法

    使用Idea或Datagrip导入excel数据的方法

    这篇文章主要介绍了使用Idea或Datagrip导入excel数据的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java编程实现五子棋人人对战代码示例

    Java编程实现五子棋人人对战代码示例

    这篇文章主要介绍了Java编程实现五子棋人人对战代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • 关于Idea中的.properties文件显示问题

    关于Idea中的.properties文件显示问题

    这篇文章主要介绍了关于Idea中的.properties文件显示问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java内部类原理、概述与用法实例详解

    Java内部类原理、概述与用法实例详解

    这篇文章主要介绍了Java内部类原理、概述与用法,结合实例形式详细分析了Java内部类的相关概念、原理、访问、调用方法等操作技巧与注意事项,需要的朋友可以参考下
    2019-03-03
  • Spring Security登录接口兼容JSON格式登录实现示例

    Spring Security登录接口兼容JSON格式登录实现示例

    前后端分离中,前端和后端的数据交互通常是JSON格式,本文主要介绍了Spring Security登录接口兼容JSON格式登录实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 浅析Java.IO输入输出流 过滤流 buffer流和data流

    浅析Java.IO输入输出流 过滤流 buffer流和data流

    这篇文章主要介绍了Java.IO输入输出流 过滤流 buffer流和data流的相关资料,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10

最新评论