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