使用实例:SpringBoot+Logback日志框架配置详解

一、Logback日志框架简介

Logback是一个高效的、灵活的、可配置的日志框架,是Log4j框架的继承者,其基于一系列过滤器来实现对日志记录的控制和过滤,并且日志输出的目的地可以是控制台、文件、甚至是网络。因此Logback日志框架在Java世界中被广泛使用,特别是在SpringBoot项目中,其支持许多不同类型的应用实例的日志记录需求。

二、Logback的依赖配置

在SpringBoot项目中,我们可以通过Maven进行Logback的依赖配置,具体的依赖配置信息如下所示:

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

这两个依赖是对应Logback框架的核心依赖,通过这些依赖我们可以在SpringBoot项目中使用Logback框架进行日志的记录和管理。

三、Logback的配置文件

Logback框架最重要的组件就是配置文件。在SpringBoot项目中,你需要在classpath路径下定义一个名为logback.xml或者logback-spring.xml的文件。这个配置文件包含了日志输出的各种参数和设定,比如日志文件的输出目录、日志文件的命名、日志文件的分割周期等等。

下面是一个简单的logback.xml配置文件示例:

<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>

  <!-- 配置日志输出文件 -->
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>./logs/mylog.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>./logs/mylog.%d{yyyy-MM-dd}.log</fileNamePattern>
    </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="CONSOLE" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

这个配置文件定义了两个日志输出源,一个输出目标为控制台,另一个输出目标为文件。其中,控制台输出源名称为CONSOLE,使用的是ConsoleAppender,文件输出源名称为FILE,使用的是RollingFileAppender。在配置中,我们可以使用Root作为根输出日志,定义输出级别,并将输出源引入进去。

四、在SpringBoot项目中使用Logback

使用Logback非常简单,只需要将Logback配置文件添加到classpath路径中即可。SpringBoot会自动为我们检测到配置文件并使用它来配置应用程序的日志输出。

下面是使用Logback进行日志记录的示例代码:

@Slf4j
@RestController
@RequestMapping("/api/v1")
public class UserController {

    @GetMapping("/users")
    public ResponseEntity<List<User>> getUsers() {
        List<User> users = new ArrayList<>();
        users.add(new User("Alice", 20));
        users.add(new User("Bob", 25));
        log.info("Get all users");
        return ResponseEntity.ok(users);
    }

    @PostMapping("/users")
    public ResponseEntity<User> addUser(@RequestBody User user) {
        log.info("Add user {}", user);
        return ResponseEntity.ok(user);
    }
}

上述代码中,我们首先通过@Slf4j注解来引入Lombok中的@Slf4j日志,然后在控制器类中定义了两个HTTP请求处理方法,一个获取用户列表,另一个添加用户。在这两个方法中,我们使用了Logback框架定义的log.info方法来输出日志信息,其中log会自动获取当前类的日志记录器。

五、Logback的过滤器管理

Logback框架除了支持不同的输出源和输出级别之外,还支持不同的过滤器管理。通过合理地配置不同的过滤器,我们可以对日志进行更加细致的控制。

下面是一个使用Logback过滤器进行日志管理的示例配置文件:

<configuration>
  <!-- 配置日志输出源为控制台 -->
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>TRACE</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- 配置日志输出文件 -->
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>./logs/mylog.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>./logs/mylog.%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>WARN</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <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" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

在这个配置文件中,我们首先定义了一个针对控制台输出源的LevelFilter过滤器,该过滤器只接受TRACE及以上级别的日志输出。对于文件输出源,我们定义了另外一个LevelFilter过滤器,该过滤器只接受WARN及以上级别的日志输出。通过这样的过滤器配置,我们可以对不同的日志输出源进行不同的日志级别筛选和管理。

六、Logback的调试与优化

Logback框架提供了多种机制来帮助我们调试和优化日志输出性能,比如线程安全检查、动态调整日志级别等等。在实际使用中,我们可以通过增加调试信息和性能统计来帮助我们更好地理解和优化应用程序日志。

下面是一个Logback的性能统计模块配置示例:

<appender name="STAT" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>./logs/mylog-perf.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>./logs/mylog-perf.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
    </filter>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
        <onMatch>DENY</onMatch>
        <onMismatch>ACCEPT</onMismatch>
    </filter>
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <expression>return %logger{20}.contains("repository");</expression>
        <onMatch>DENY</onMatch>
        <onMismatch>ACCEPT</onMismatch>
    </filter>
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <expression>return %logger{20}.contains("service");</expression>
        <onMatch>DENY</onMatch>
        <onMismatch>ACCEPT</onMismatch>
    </filter>
    <filter class="ch.qos.logback.classic.filter.DuplicateMessageFilter">
        <interval>60000</interval>
        <hash>5</hash>
        <value>1</value>
    </filter>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <filter class="ch.qos.logback.classic.filter.DenyAllFilter"/>
</appender>

这个配置文件中,我们定义了一个名为STAT的输出源,并对其进行了多项过滤和统计操作。其中,HashDuplicateChecker统计了1分钟内相同的日志信息数量,通过设置筛选hash值和过滤数量的方式去重,对于不同的日志类别,我们还定义了独立的EvaluatorFilter过滤器,来限制不同级别日志的输出。

结语:

这篇文章详细介绍了使用实例:SpringBoot+Logback日志框架配置详解,从Logback日志框架的简介、依赖配置、配置文件、使用示例、过滤器管理、调试优化等多个方面对其进行了详细说明,希望各位读者可以在实际应用中成功使用Logback框架,优化应用程序日志输出质量,提升应用程序的稳定性和性能。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/199514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-05 10:22
下一篇 2024-12-05 10:22

相关推荐

  • Ojlat:一款快速开发Web应用程序的框架

    Ojlat是一款用于快速开发Web应用程序的框架。它的主要特点是高效、易用、可扩展且功能齐全。通过Ojlat,开发人员可以轻松地构建出高质量的Web应用程序。本文将从多个方面对Oj…

    编程 2025-04-29
  • Zlios——一个多功能的开发框架

    你是否在开发过程中常常遇到同样的问题,需要不断去寻找解决方案?你是否想要一个多功能、易于使用的开发框架来解决这些问题?那么,Zlios就是你需要的框架。 一、简介 Zlios是一个…

    编程 2025-04-29
  • Python生成随机数的应用和实例

    本文将向您介绍如何使用Python生成50个60到100之间的随机数,并将列举使用随机数的几个实际应用场景。 一、生成随机数的代码示例 import random # 生成50个6…

    编程 2025-04-29
  • Cron执行日志用法介绍

    本文将从多个方面对cron执行日志进行详细阐述,包括cron执行日志的定义、cron执行日志的产生原因、cron执行日志的格式以及如何解读cron执行日志。 一、定义 Cron是一…

    编程 2025-04-29
  • agavi开发框架

    Agavi是一个基于MVC模式的Web应用程序开发框架,以REST和面向资源的设计为核心思想。本文章将从Agavi的概念、优点、使用方法和实例等方面进行详细介绍。 一、概念 Aga…

    编程 2025-04-29
  • Python unittest框架用法介绍

    Python unittest框架是Python自带的一种测试框架,可以用来编写并运行测试用例。在本文中,我们将从以下几个方面详细介绍Python unittest框架的使用方法和…

    编程 2025-04-29
  • Hibernate日志打印sql参数

    本文将从多个方面介绍如何在Hibernate中打印SQL参数。Hibernate作为一种ORM框架,可以通过打印SQL参数方便开发者调试和优化Hibernate应用。 一、通过配置…

    编程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、轻量级、可扩展的RPC框架。其广泛被应用于阿里集团内部服务以及阿里云上的服务。该框架通过NIO支持高并发,同时还内置了多种…

    编程 2025-04-29
  • 使用Snare服务收集日志:完整教程

    本教程将介绍如何使用Snare服务收集Windows服务器上的日志,并将其发送到远程服务器进行集中管理。 一、安装和配置Snare 1、下载Snare安装程序并安装。 https:…

    编程 2025-04-29
  • Log4j日志打印到Systemout.log

    Log4j是Apache的一个强大的日志组件,可以帮助开发者更好地管理日志。在Java应用程序中,很多开发者都会选择使用Log4j来实现日志输出。本文将介绍如何使用Log4j将日志…

    编程 2025-04-28

发表回复

登录后才能评论