SpringBoot 集成日志

参考

快速开始

  1. 添加依赖
  • 添加spring-boot-starter-logging依赖。
  • 如果pom包含了任何spring-boot-starter的依赖,如spring-boot-starter-web则不需要添加任何依赖。因为已经默认集成了spring-boot-starter-logging
  1. 简单使用代码示例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @RestController
    class HelloController {

    private final Logger logger = LoggerFactory.getLogger(HelloController.class);

    @GetMapping("/")
    public String hello() {
    logger.info("处理'/'请求");
    return "Hello, World!";
    }
    }

配置LogBack

  • 配置文件位置:src/main/resources/logback-spring.xml,不存在则新建。
  • 基本配置示例:下面的配置效果和没有创建时,使用默认配置一样。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <configuration>

    <springProfile name="dev">
    <!-- appender 定义日志输出的位置和方式
    name="CONSOLE" 自定义唯一标识符,用来被root/logger引用
    class="ch.xxx" 指定了具体实现类,必须提供一个有效的、完全限定的类名。
    -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 定义如何格式化日志事件 -->
    <encoder>
    <!--pattern 用来指定日志输出的具体格式。
    %d{yyyy-MM-dd HH:mm:ss} 表示日志事件的时间戳。这里的 {yyyy-MM-dd HH:mm:ss} 指定了日期格式。
    %-5level:表示日志级别,并且宽度固定为5个字符(左对齐)
    [%thread]:表示生成日志的线程名称,通常对于多线程应用非常有用,可以帮助区分不同线程产生的日志。
    %logger{36}:表示记录器的名字,这里 {36} 表示最长截取36个字符。如果记录器的名字超过这个长度,则会被截断。
    %msg:表示日志的实际消息内容。
    %n:表示换行符,确保每条日志都从新的一行开始。
    -->
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
    </encoder>
    </appender>

    <!-- 设置root logger的级别为INFO,并将其与CONSOLE appender关联 -->
    <root level="INFO">
    <appender-ref ref="CONSOLE"/>
    </root>
    </springProfile>

    </configuration>
  • 将日志写入到文件示例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <!-- 定义一个名为 FILE 的 appender -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 日志文件路径 -->
    <file>logs/error.log</file>

    <!-- 滚动策略 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!-- 每天生成一个新的日志文件,并且旧文件以日期为后缀命名 -->
    <fileNamePattern>logs/error-%d{yyyy-MM-dd}.log</fileNamePattern>
    <!-- 保留30天的日志文件 -->
    <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
    </encoder>
    </appender>

日志配置基础概念讲解

  • Appender:Appender是一个核心概念,它负责将日志事件输出到不同的目的地。换句话说,Appender定义了日志输出的位置和方式。通过Appender,你可以控制日志是输出到控制台、文件、数据库,还是通过网络发送等。
    • ConsoleAppender:将日志输出到控制台。这是最常用的Appender之一,适合开发环境中的快速调试。
    • FileAppender:将日志写入到文件中。适用于需要持久化存储日志信息的场景。
    • RollingFileAppender:扩展自FileAppender,增加了滚动功能,即当日志文件达到一定大小或符合某个时间条件时,会自动创建一个新的日志文件。这有助于管理日志文件的大小和数量,避免单个日志文件过大。
    • AsyncAppender:异步地将日志事件转发给其他Appender。通过使用独立线程来处理日志事件,它可以减少日志记录对应用程序性能的影响。

标签

  • <configuration>:这是Logback的根标签,用于定义整个配置。
  • <springProfile>: 用于指定一个或多个Spring环境,只有当当前环境与指定的环境匹配时,才应用该配置。
  • <appender-ref>:用于引用一个已定义的Appender,并将其与Logger关联起来。
  • <appender>:用于定义一个Appender,它负责将日志事件输出到不同的目的地。
  • <root>:用于定义根Logger,它负责处理未匹配到其他Logger的日志事件。
  • <logger>:用于定义一个特定的包或类,并指定它的日志级别和Appender。