大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

以下是正文!

一、写文背景

我们在写后端项目的时候,日志打印是必需的。支持SpringBoot项目的日志框架一般有log4j、logback,这二者各有优劣,这里就不展开对比了。我们项目中常用的是logback框架,该框架主要是一个logback-spring.xml配置文件起作用。每次起新的项目我都是从老项目中copy一份出来,这份配置文件内容很详细,几百行左右,我一般都是修改一下应用名、日志输出路径,新项目就可以用了。这份老文件是之前的一个师兄留下的,我使用的时候也没深入去思考过各个配置的作用,这段时间刚好比较空闲,打算从0开始写出一个自己能看懂的logback-spring.xml

二、准备篇

首先,我准备了一个空的SpringBoot项目,版本为2.7.13。项目结构图如下:

初始的pom.xml配置文件内容如下:

查看代码

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>logback</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>logback</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- Springboot web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

启动日志输出如下:

其次,引入logback核心组件,因为SpringBoot自带logback组件,所以我们在引入的时候不需要指定logback的版本号。

<!-- logback核心组件 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>

最后,我们在resources目录下新建一个空的logback-spring.xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration> </configuration>

这样我们在启动的时候,打印只有一个banner

三、基础篇

1、输出日志到控制台(console)

刚才我们看到如果logback-spring.xml的配置为空的话,那么只会输出一个banner,其他的日志都不会被打印,所以我们第一步就是要把日志打印到控制台上来。

第一步、配置控制台的appender(logback中appender是负责写日志的组件)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 配置日志打印格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${PID:- } %logger{36} %-5level - %msg%n</pattern>
<charset>utf8</charset>
</encoder>
</appender>
</configuration>

第二步、设置打印到控制台的日志的级别

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 配置日志打印格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${PID:- } %logger{36} %-5level - %msg%n</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

这时控制台已经有日志输出了,输出格式如下

第三步、加入logback默认的一些配置

上面自定义的输出格式有点丑,logback给我们提供了一些默认的配置和格式,只需要使用include标签引入即可。
代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

这时我们再启动,发现样式就好看多了

2、将日志输出到文件,如application.log文件

刚才的日志是打印到控制台的,我们一旦把ide关闭就看不到了,所以我们需要把日志输出到一个文件中,以便将日志留存下来。

第一步、定义应用名称,区分应用

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

   <!-- 定义应用名称,区分应用 -->
   <property name="APP_NAME" value="logback-test"/>

  <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

第二步、定义日志文件的输出路径

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

第三步、定义日志文件名称和路径

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

第四步、将日志滚动输出到application.log文件中

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

第五步、设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

   <!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>

  <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender>


  <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>

  <!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

第六步、追加日志到APPLICATION中

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

  <!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>

   <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender>

 
  <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>

   <!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
</root>
</configuration>

配置好之后,启动项目,找到user.home会发现有一个logback-test的文件,里面有一个application.log文件,如下图

温馨提示:如何找到user.home

在Windows上,可以通过打开Windows资源管理器,然后在地址栏中键入%userprofile%来找到user.home。

在Mac上,可以通过打开终端应用程序,然后输入echo $HOME命令来找到user.home。

在Linux上,可以通过打开终端应用程序,然后输入echo $HOME命令来找到user.home。

  

3、日志分级,将INFO、WARN、ERROR日志分别打印

其实INFO的日志已经在打印在控制台中了,这里我们需要单独把WARN、ERROR拎出来打印,主要是为了方便后续排查bug使用。

第一步、定义WARN、ERROR日志文件路径

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
</root>
</configuration>

第二步、将WARN、ERROR日志摘取出并输出到指定文件中

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 摘取出WARN级别日志输出到warn.log中 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${WARN_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将WARN相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <!-- 摘取出ERROR级别日志输出到error.log中 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ERROR_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将ERROR相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
</root>
</configuration>

第三步、将WARN、ERROR日志加到控制台打印,并输出到指定文件中

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 摘取出WARN级别日志输出到warn.log中 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${WARN_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将WARN相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <!-- 摘取出ERROR级别日志输出到error.log中 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ERROR_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将ERROR相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置输出级别 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
<!-- 加入WARN日志输出 -->
<appender-ref ref="WARN"/>
<!-- 加入ERROR日志输出 -->
<appender-ref ref="ERROR"/>
</root>
</configuration>

在启动之前,我分别加了一条WARN、ERROR日志,启动时自动打印,如下

同时在logback-test目录下也生成了warn.log和error.log文件。

四、进阶篇

1、打印指定目录下的日志

现在我们调整项目结构如下:

我想把service中的日志单独打印出来,输出到service.log中,步骤如下

第一步、定义指定目录日志文件输出路径

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/>
<!-- 定义指定目录service日志文件名称和路径 -->
<property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 摘取出WARN级别日志输出到warn.log中 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${WARN_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将WARN相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <!-- 摘取出ERROR级别日志输出到error.log中 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ERROR_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将ERROR相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 配置输出级别 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
<!-- 加入WARN日志输出 -->
<appender-ref ref="WARN"/>
<!-- 加入ERROR日志输出 -->
<appender-ref ref="ERROR"/>
</root>
</configuration>

第二步、定义指定目录日志的appender

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/>
<!-- 定义指定目录service日志文件名称和路径 -->
<property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 摘取出WARN级别日志输出到warn.log中 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${WARN_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将WARN相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <!-- 摘取出ERROR级别日志输出到error.log中 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ERROR_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将ERROR相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 定义指定目录service的appender -->
<appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SERVICE_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 配置输出级别 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
<!-- 加入WARN日志输出 -->
<appender-ref ref="WARN"/>
<!-- 加入ERROR日志输出 -->
<appender-ref ref="ERROR"/>
</root>

</configuration>

第三步、追加日志到service的appender中

这里我们不能直接将SERVICE加到root标签下,要使用另外一个标签logger,该标签继承了root,是子logger。该标签有一个additivity属性,若是additivity设为true,则子logger不止会在自己的appender里输出,还会在root的logger的appender里输出;若是additivity设为false,则子logger只会在自己的appender里输出,不会在root的logger的appender里输出

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/>
<!-- 定义指定目录service日志文件名称和路径 -->
<property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 摘取出WARN级别日志输出到warn.log中 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${WARN_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将WARN相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <!-- 摘取出ERROR级别日志输出到error.log中 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ERROR_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将ERROR相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 定义指定目录service的appender -->
<appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SERVICE_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 配置扫描包路径,追加日志到service的appender中 -->
<!--若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<logger name="com.example.logback.service" level="INFO" additivity="true">
<appender-ref ref="SERVICE"/>
</logger> <!-- 配置输出级别 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
<!-- 加入WARN日志输出 -->
<appender-ref ref="WARN"/>
<!-- 加入ERROR日志输出 -->
<appender-ref ref="ERROR"/>
</root>
</configuration>

启动只有又会多一个service.log,如下

2、切面日志打印

可能有些同学不知道这个是啥,这里我举个场景,就好理解了。

假设现在的项目结构如下,增加了一个HttpAspect切面类,作用是监控controller中每个方法的入参、出参、接口耗时等信息,这个功能相信大家都做过。

HttpAspect代码如下

package com.example.logback.config;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; @Slf4j
@Aspect
@Component
public class HttpAspect { @Pointcut("execution(* com.example.logback.controller..*.*(..))")
public void pointCut() { } @Around(value = "pointCut()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { // 获取目标参数
String serviceUniqueName = proceedingJoinPoint.getSignature().getDeclaringTypeName();
String methodName = proceedingJoinPoint.getSignature().getName();
long start = System.currentTimeMillis();
Object proceed = proceedingJoinPoint.proceed();
log.info("@Http:{}.{},耗时:{}ms", serviceUniqueName, methodName,
System.currentTimeMillis() - start);
return proceed;
}
}

相信细心的同学已经发现问题了,controller目录下的类里面是没有打印的,log都在config目录下的HttpAspect中,显然指定打印目录为controller是不行的。

那如果指定目录为config呢?如果这个目录下只有一个HttpAspect类是可以的,但如果该目录下还有其他配置类,那这个办法就不太好用了。

这时我们就需要通过指定类的方式进行打印。

那怎么指定类进行打印呢?我们常用的@Slf4j注解里面有一个属性topic

@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.TYPE)
public @interface Slf4j {
/** @return The category of the constructed Logger. By default, it will use the type where the annotation is placed. */
String topic() default "";
}

定义方式也很简单,如下

这个topic定义之后,和logger中的name属性对上之后,那么这个logger就只会打印这个类的日志!!!

第一步、指定类定义topic

package com.example.logback.config;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; @Slf4j(topic = "http-log")
@Aspect
@Component
public class HttpAspect { @Pointcut("execution(* com.example.logback.controller..*.*(..))")
public void pointCut() { } @Around(value = "pointCut()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { // 获取目标参数
String serviceUniqueName = proceedingJoinPoint.getSignature().getDeclaringTypeName();
String methodName = proceedingJoinPoint.getSignature().getName();
long start = System.currentTimeMillis();
Object proceed = proceedingJoinPoint.proceed();
log.info("@Http:{}.{},耗时:{}ms", serviceUniqueName, methodName,
System.currentTimeMillis() - start);
return proceed;
}
}

第二步、定义指定类topic的日志文件输出路径

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/>
<!-- 定义指定目录service日志文件名称和路径 -->
<property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/>
<!-- 定义指定目录HTTP日志文件名称和路径 -->
<property name="HTTP_PACKAGE_LOG_FILE" value="${LOG_PATH}/http-package.log"/>
<!-- 定义指定类topic方式的日志文件名称和路径 -->
<property name="HTTP_TOPIC_LOG_FILE" value="${LOG_PATH}/http-topic.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 摘取出WARN级别日志输出到warn.log中 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${WARN_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将WARN相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <!-- 摘取出ERROR级别日志输出到error.log中 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ERROR_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将ERROR相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 定义指定目录service的appender -->
<appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SERVICE_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 定义指定目录HTTP-PACKAGE的appender -->
<appender name="HTTP-PACKAGE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${HTTP_PACKAGE_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/http-package.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 配置扫描包路径,追加日志到service的appender中 -->
<!--若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<logger name="com.example.logback.service" level="INFO" additivity="true">
<appender-ref ref="SERVICE"/>
</logger> <!-- 配置扫描包路径,追加日志到HTTP-PACKAGE的appender中 -->
<!--若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<logger name="com.example.logback.config" level="INFO" additivity="false">
<appender-ref ref="HTTP-PACKAGE"/>
</logger> <!-- 配置输出级别 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
<!-- 加入WARN日志输出 -->
<appender-ref ref="WARN"/>
<!-- 加入ERROR日志输出 -->
<appender-ref ref="ERROR"/>
</root>
</configuration> 

第三步、定义指定类topic的appender

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/>
<!-- 定义指定目录service日志文件名称和路径 -->
<property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/>
<!-- 定义指定目录HTTP日志文件名称和路径 -->
<property name="HTTP_PACKAGE_LOG_FILE" value="${LOG_PATH}/http-package.log"/>
<!-- 定义指定类topic方式的日志文件名称和路径 -->
<property name="HTTP_TOPIC_LOG_FILE" value="${LOG_PATH}/http-topic.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 摘取出WARN级别日志输出到warn.log中 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${WARN_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将WARN相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <!-- 摘取出ERROR级别日志输出到error.log中 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ERROR_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将ERROR相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 定义指定目录service的appender -->
<appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SERVICE_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 定义指定目录HTTP-PACKAGE的appender -->
<appender name="HTTP-PACKAGE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${HTTP_PACKAGE_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/http-package.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 定义指定类topic的appender -->
<appender name="HTTP-TOPIC" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${HTTP_TOPIC_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/http-topic.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 配置扫描包路径,追加日志到service的appender中 -->
<!--若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<logger name="com.example.logback.service" level="INFO" additivity="true">
<appender-ref ref="SERVICE"/>
</logger> <!-- 配置扫描包路径,追加日志到HTTP-PACKAGE的appender中 -->
<!--若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<logger name="com.example.logback.config" level="INFO" additivity="false">
<appender-ref ref="HTTP-PACKAGE"/>
</logger> <!-- 配置输出级别 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
<!-- 加入WARN日志输出 -->
<appender-ref ref="WARN"/>
<!-- 加入ERROR日志输出 -->
<appender-ref ref="ERROR"/>
</root>
</configuration>

第四步、追加日志到指定类topic的appender中

<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!-- 定义日志文件的输出路径 -->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<!-- 定义警告级别日志文件名称和路径 -->
<property name="WARN_LOG_FILE" value="${LOG_PATH}/warn.log"/>
<!-- 定义错误级别日志文件名称和路径 -->
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error.log"/>
<!-- 定义指定目录service日志文件名称和路径 -->
<property name="SERVICE_LOG_FILE" value="${LOG_PATH}/service.log"/>
<!-- 定义指定目录HTTP日志文件名称和路径 -->
<property name="HTTP_PACKAGE_LOG_FILE" value="${LOG_PATH}/http-package.log"/>
<!-- 定义指定类topic方式的日志文件名称和路径 -->
<property name="HTTP_TOPIC_LOG_FILE" value="${LOG_PATH}/http-topic.log"/> <!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 摘取出WARN级别日志输出到warn.log中 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${WARN_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将WARN相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <!-- 摘取出ERROR级别日志输出到error.log中 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ERROR_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<!-- 日志过滤器,将ERROR相关日志过滤出来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender> <!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- 定义指定目录service的appender -->
<appender name="SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SERVICE_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/service.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 定义指定目录HTTP-PACKAGE的appender -->
<appender name="HTTP-PACKAGE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${HTTP_PACKAGE_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/http-package.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 定义指定类topic的appender -->
<appender name="HTTP-TOPIC" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${HTTP_TOPIC_LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 设置 RollingPolicy 属性,用于配置文件大小限制,保留天数、文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件命名格式 -->
<fileNamePattern>${LOG_PATH}/http-topic.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 文件保留最大天数 -->
<maxHistory>7</maxHistory>
<!-- 文件大小限制 -->
<maxFileSize>50MB</maxFileSize>
<!-- 文件总大小 -->
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
</appender> <!-- 配置扫描包路径,追加日志到service的appender中 -->
<!--若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<logger name="com.example.logback.service" level="INFO" additivity="true">
<appender-ref ref="SERVICE"/>
</logger> <!-- 配置扫描包路径,追加日志到HTTP-PACKAGE的appender中 -->
<!--若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<logger name="com.example.logback.config" level="INFO" additivity="false">
<appender-ref ref="HTTP-PACKAGE"/>
</logger> <!-- 配置扫描包路径,追加日志到HTTP-TOPIC的appender中 -->
<!--若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<logger name="http-log" level="INFO" additivity="false">
<appender-ref ref="HTTP-TOPIC"/>
</logger> <!-- 配置输出级别 -->
<root level="INFO">
<!-- 加入控制台输出 -->
<appender-ref ref="CONSOLE"/>
<!-- 加入APPLICATION输出 -->
<appender-ref ref="APPLICATION"/>
<!-- 加入WARN日志输出 -->
<appender-ref ref="WARN"/>
<!-- 加入ERROR日志输出 -->
<appender-ref ref="ERROR"/>
</root>
</configuration>

日志目录中多了一个文件,http-topic,如下

五、写在最后

这篇文章篇幅比较长,主要是配置文件贴的比较多,我本来是想每一步只贴关键代码的,但成文之后看起来有点费劲,所以每一步都贴了全量的配置。xml文件我觉得是比较难阅读的一种文档,里面的标签又多又乱,没有顺序可言。如果不是从第一个标签开始看,根本不知道标签之间的依赖关系,为了方便大家阅读,我用了这种颜色表示新增的配置,这种颜色表示有关联的配置,无色表示无关配置。不过我也不知道这种办法能不能提高阅读体验,如果大家有好的想法也可以评论提出来,在此表示感谢!

SpringBoot项目从0到1配置logback日志打印的更多相关文章

  1. springboot项目配置logback日志系统

    记录springboot项目配置logback日志文件管理: logback依赖jar包 SpringBoot项目配置logback理论上需要添加logback-classic依赖jar包: < ...

  2. springboot配置logback日志

    springboot配置logback日志 java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日 ...

  3. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  4. SpringBoot入门教程(八)配置logback日志

    Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access.logback-c ...

  5. springboot项目实现jar包外配置文件管理

    背景 为实现快速搭建和开发,项目以Springboot框架搭建,springboot搭建的项目可以将项目直接打成jar包并运行,无需自己安装配置Tomcat或者其他服务器,是一种方便快捷的部署方式. ...

  6. springboot项目抓数据后优化配置及四个补充

    昨天搞了一个抓取某某平台信息的抓取功能,其中有一个地址url,昨天是写死的,之前也进行配置过,印象有些模糊,今天想配置一下,在properties文件中,由此引发了下面的一系列总结操作: 1.原始模式 ...

  7. springboot项目启动之后初始化自定义配置类

    前言 今天在写项目的时候,需要再springboot项目启动之后,加载我自定义的配置类的一些方法,百度了之后特此记录下. 正文 方法有两种: 1. 创建自定义类实现 CommandLineRunner ...

  8. springboot项目屏蔽mq或者mongodb的监控日志输出

    最近写项目,用的是springboot,其中用到了rabbitmq和mongodb,配置完成 项目启动后,会输出如下日志: mongodb和mq的检测,会一直打印日志,这样会影响开发人员的测试. 如何 ...

  9. logback日志打印sql

    今天整合springboot2 + mybatis + logback 遇到了在日志中sql打印不出来的坑,在网上找了好久,都不是我遇到的问题,这里吐槽一下下现在的博客质量,好多都是抄袭的,也没有标注 ...

  10. Springcloud/Springboot项目绑定域名,使用Nginx配置Https

    https://blog.csdn.net/a_squirrel/article/details/79729690 一.Https 简介(百度百科) HTTPS(全称:Hyper Text Trans ...

随机推荐

  1. 【AIGC未来的发展方向】面向人工智能的第一步,一文告诉你人工智能是什么以及未来的方向分析

    人工智能的概念 当人们提到"人工智能(AI)"时,很多人会想到机器人和未来世界的科幻场景,但AI的应用远远不止于此.现在,AI已经广泛应用于各种行业和生活领域,为我们带来了无限可能 ...

  2. Schillace法则:使用LLM创建软件的最佳实践

    LLM(大语言模型)的发展正在改变软件开发的方式. 以前,开发人员需要编写大量的代码来实现其意图,但现在,随着语言模型的发展,开发人员可以使用自然语言来表达他们的意图,而无需编写大量的代码.这使得软件 ...

  3. 【Java SE】反射

    Java Reflection 1 Java 反射机制概述 Reflection反射被视为动态语言的关键,反射机制允许在运行期间借助于Reflection取得任何类的内部信息,并能直接操作任意对象的内 ...

  4. 【谷粒商城】(一)docker搭建以及项目的创建

    网络地址转换-端口转发 VmWare网络配置可以参考这篇:VMWare虚拟机网络连接设置_santirenpc的博客-CSDN博客_vmware 上网设置,真的是被折磨到了.. Docker 虚拟化容 ...

  5. Ubuntu20.04 Docker搭建远程xfce桌面以及ssh教程

    简介:本文主要介绍ubuntu20.04容器中搭建xfce远程桌面.C++.Go环境.容器内docker操作配置. 一.创建容器1.创建容器 docker pull ubuntu:20.04docke ...

  6. Docker Compose 部署GitLab

    先决条件 Docker Engine和Docker Compose是必需的.请参阅在CentOS上安装Docker Engine. 建议使用4核的服务器,同时至少分配4G的内存,理论上4核4G可最多支 ...

  7. day05-优惠券秒杀01

    功能03-优惠券秒杀01 4.功能03-优惠券秒杀 4.1全局唯一ID 4.1.1全局ID生成器 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单,并保存到tb_voucher_order这张表 ...

  8. win系统安装wordcloud报错解决方案

    问题: ① 在命令行下执行pip install wordcloud出现报错如图: ②下载了错误的whl文件, 出现wordcloud-1.4.1-cp27-cp27m-win_amd64.whl i ...

  9. Llinux系统(Centos/Ubuntu/Debian)弹性云系统盘扩容方法

    警告: 1.调整过分区管理方式的,例如lvm管理方式,请忽略此教程. 2.ubuntu18系统暂不支持脚本扩容,请手动扩容,参看下面ubuntu18部分,用parted操作 脚本自动处理(推荐) SS ...

  10. 2022-07-21:给定一个字符串str,和一个正数k, 你可以随意的划分str成多个子串, 目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,并且没有重合。 返回有几个回文子串。 来

    2022-07-21:给定一个字符串str,和一个正数k, 你可以随意的划分str成多个子串, 目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,并且没有重合. 返回有几个回文子串 ...