You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

125 lines
7.0 KiB

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!-- 从 Spring Boot 配置文件中,读取 spring.application.name 应用名 -->
<springProperty name="applicationName" scope="context" source="spring.application.name"/>
<property name="LOG_HOME" value="/data/logs/${applicationName}"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{traceId}] %logger{80} - %msg%n</pattern>
</encoder>
</appender>
<!-- info日志 appender -->
<!--这定义了一个名为 RollingInfoLogger 的 appender,其类型为 RollingFileAppender。
RollingFileAppender 是用于将日志写入文件的,支持基于时间或文件大小的自动滚动。-->
<appender name="RollingInfoLogger" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--这里指定了日志文件的存储路径和文件名。${LOG_HOME} 是一个之前定义的变量,代表日志文件的基础路径。
info.log 是此 appender 用于写入日志的主文件名。-->
<file>${LOG_HOME}/info.log</file>
<!--这指定了日志文件的编码方式为 UTF-8。-->
<encoder charset="UTF-8">
<!-- 这定义了日志的输出格式,包括时间戳、线程名、日志级别、记录器名和消息内容。-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
<!--这指定了一个基于时间的滚动策略。-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--这定义了滚动日志文件的命名模式。日志文件会根据时间和索引 (%i) 进行归档,并压缩成 .gz 格式。-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--这表示日志文件达到 512MB 时会触发滚动。-->
<maxFileSize>512MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<fileNamePattern>${LOG_HOME}/archive/inspect-nvr.%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
<!--这设置了保留旧日志文件的最大历史记录数。最多保留 60 天的历史日志。-->
<maxHistory>60</maxHistory>
</rollingPolicy>
<!--这是一个级别过滤器,用于控制哪些日志级别被写入。-->
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 -->
<!--这行指定了过滤器的级别。在这个例子中,只有级别为 INFO 的日志消息会被考虑。-->
<level>INFO</level>
<!--这表示当日志消息与过滤器设置的级别匹配时(即为 INFO 级别),这条日志将被接受。-->
<onMatch>ACCEPT</onMatch>
<!--这表示当日志消息不符合过滤器设置的级别时(即不是 INFO 级别),这条日志将被拒绝。-->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 出错日志 appender -->
<appender name="RollingErrorLogger" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/error.log</file>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>512MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_HOME}/archive/error.%d{yyyy-MM-dd}-%i.log.gz</FileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- warn日志 appender -->
<appender name="RollingWarnLogger" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/warn.log</file>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>512MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_HOME}/archive/warn.%d{yyyy-MM-dd}-%i.log.gz</FileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 -->
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--这行设置了 org.springframework 包中所有类的日志级别为 INFO。Spring Framework 可能会生成大量的 DEBUG 或 TRACE 级别的日志,
这些日志对于日常开发和生产环境通常不是必需的,因此将其级别设置为 INFO 可以减少日志的数量。-->
<logger name="org.springframework" level="INFO"/>
<!--同样,这行为 org.apache 包中的所有类设置了 INFO 级别的日志。Apache 提供了许多不同的库,它们也可能产生大量的低级别日志。-->
<logger name="org.apache" level="INFO"/>
<appender name="AsyncRollingInfoLogger" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="RollingInfoLogger"/>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>256</queueSize>
<includeCallerData>true</includeCallerData>
</appender>
<appender name="AsyncRollingWarnLogger" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="RollingWarnLogger"/>
<includeCallerData>true</includeCallerData>
</appender>
<appender name="AsyncRollingErrorLogger" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="RollingErrorLogger"/>
<includeCallerData>true</includeCallerData>
</appender>
<!-- root级别的日志过滤,只有级别是info级别的才会传递给RollingInfoLogger,RollingErrorLogger,RollingWarnLogger继续过滤 -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="AsyncRollingInfoLogger"/>
<appender-ref ref="AsyncRollingWarnLogger"/>
<appender-ref ref="AsyncRollingErrorLogger"/>
</root>
</configuration>