Files
djangoadmin-web/xiaomayi-modules/xiaomayi-admin/src/main/resources/logback-spring.xml
T
2026-09-10 21:41:50 +08:00

331 lines
17 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="UTF-8"?>
<!--
日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
父级标签:
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" debug="true" scanPeriod="10 seconds">
<!-- 日志上下文名称 -->
<contextName>logback</contextName>
<!-- 备注:name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<!-- 日志文件存放路径,实际使用时可自定义,默认取模块名 -->
<!--
特别提醒:
1、如果继承了springboot的parent,此处动态取值则使用:@project.artifactId@
2、如果没继承springboot的parent,此处动态取值则使用:${project.artifactId}
切记,以上是踩坑之后查阅大量资料最终总结的心得,分享给有缘人,小蚂蚁云团队提供技术支持!
-->
<!-- 日志路径,默认取当前模块的项目名称 -->
<property name="log.path" value="logs/@project.artifactId@"/>
<!-- 属性声明:普通日志打印写log文件用-->
<property name="file.encoder" value="%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n"/>
<!-- 彩色日志 -->
<!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 -->
<!-- magenta:洋红 -->
<!-- boldMagenta:粗红-->
<!-- cyan:青色 -->
<!-- white:白色 -->
<!-- magenta:洋红 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 1. 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 此处设置字符集:UTF-8 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 2. 文件输出 - 按级别分离输出到文件-->
<!-- INFO 级别文件:时间滚动输出 level为 INFO 日志 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/info.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${file.encoder}</pattern>
<!-- 此处设置字符集:UTF-8 -->
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名,每月日志归档路径以及格式 -->
<fileNamePattern>${log.path}/%d{yyyy-MM}/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--单个文件的最大大小-->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 最大保存大小最多1GB,超过自动删除旧的日志文件 -->
<totalSizeCap>1GB</totalSizeCap>
<!-- 日志文件保留天数,无论是否超过1GB,过期直接都会删除 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 打印日志级别,此日志文档只记录info级别日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 级别 -->
<level>INFO</level>
<!-- 只要INFO -->
<onMatch>ACCEPT</onMatch>
<!-- 其他的都不要 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- DEBUG 级别文件:时间滚动输出 level为 DEBUG 日志 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/debug.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${file.encoder}</pattern>
<!-- 此处设置字符集:UTF-8 -->
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名,每月日志归档路径以及格式 -->
<fileNamePattern>${log.path}/%d{yyyy-MM}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--单个文件的最大大小-->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 最大保存大小最多1GB,超过自动删除旧的日志文件 -->
<totalSizeCap>1GB</totalSizeCap>
<!-- 日志文件保留天数,无论是否超过1GB,过期直接都会删除 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 打印日志级别,此日志文档只记录debug级别日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 级别 -->
<level>DEBUG</level>
<!-- 只要DEBUG -->
<onMatch>ACCEPT</onMatch>
<!-- 其他的都不要 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- WARN 级别文件:时间滚动输出 level为 WARN 日志 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/warn.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${file.encoder}</pattern>
<!-- 此处设置字符集:UTF-8 -->
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名,每月日志归档路径以及格式 -->
<fileNamePattern>${log.path}/%d{yyyy-MM}/warn.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--单个文件的最大大小-->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 最大保存大小最多1GB,超过自动删除旧的日志文件 -->
<totalSizeCap>1GB</totalSizeCap>
<!-- 日志文件保留天数,无论是否超过1GB,过期直接都会删除 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 打印日志级别,此日志文档只记录warn级别日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 级别 -->
<level>WARN</level>
<!-- 只要WARN -->
<onMatch>ACCEPT</onMatch>
<!-- 其他的都不要 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- ERROR 级别文件:时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/error.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${file.encoder}</pattern>
<!-- 此处设置字符集:UTF-8 -->
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名,每月日志归档路径以及格式 -->
<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--单个文件的最大大小-->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 最大保存大小最多1GB,超过自动删除旧的日志文件 -->
<totalSizeCap>1GB</totalSizeCap>
<!-- 日志文件保留天数,无论是否超过1GB,过期直接都会删除 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 级别 -->
<level>ERROR</level>
<!-- 只要ERROR -->
<onMatch>ACCEPT</onMatch>
<!-- 其他的都不要 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 3. ELK 日志输出 -->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.10.102:20040</destination>
<!-- 使用异步提高性能 -->
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"app":"${appName}","env":"${profile}","host":"${HOSTNAME}"}</customFields>
<includeContext>false</includeContext>
<timeZone>Asia/Shanghai</timeZone>
<timestampPattern>yyyy-MM-dd HH:mm:ss.SSS</timestampPattern>
</encoder>
<!-- 连接保持和重试配置 -->
<keepAliveDuration>5 minutes</keepAliveDuration>
<reconnectionDelay>5000</reconnectionDelay>
<connectionTimeout>5000</connectionTimeout>
<!-- 队列配置 -->
<queueSize>1024</queueSize>
<writeBufferSize>8192</writeBufferSize>
</appender>
<!-- 4. 综合日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/all.log</file>
<encoder>
<pattern>${file.encoder}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/all.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 日志级别配置 -->
<logger name="org.springframework" level="WARN"/>
<logger name="org.hibernate" level="WARN"/>
<logger name="com.zaxxer.hikari" level="WARN"/>
<!-- MyBatis-Plus SQL日志配置 -->
<logger name="com.baomidou.mybatisplus" level="DEBUG"/>
<logger name="org.apache.ibatis" level="DEBUG"/>
<logger name="java.sql" level="DEBUG"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="java.sql.ResultSet" level="DEBUG"/>
<!-- Mapper接口包配置,使用**匹配多级目录 -->
<logger name="com.xiaomayi.**.mapper" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DEBUG_FILE"/>
</logger>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、
以及指定<appender>。<logger>仅有一个name属性,
一个可选的level和一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
<logger name="org.springframework.web" level="info"/>
<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
-->
<!--
使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
第二种就是单独给dao下目录配置debug模式(在application.xml文件中),代码如下,这样配置sql语句会打印,其他还是正常info级别:
【logging:
config: classpath:logback-spring.xml
level:
dao: debug
org:
mybatis: debug】
-->
<!--
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能设置为INHERITED或者同义词NULL。默认是DEBUG
可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-->
<!-- springProfile多环境日志输出,根据不同环境(local:本地环境,prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,读取spring.profiles.active的值-->
<!-- 开发/测试环境配置 -->
<springProfile name="local,dev,test">
<!-- 开发环境特定配置 -->
<logger name="org.springframework.web" level="WARN"/>
<logger name="com.xiaomayi" level="INFO"/>
<!-- 控制台输出SQL日志 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="ERROR_FILE"/>
<!-- <appender-ref ref="LOGSTASH"/>-->
<!-- <appender-ref ref="FILE"/>-->
</root>
</springProfile>
<!-- 生产环境配置 -->
<springProfile name="uat|prod">
<logger name="org.springframework.web" level="ERROR">
</logger>
<logger name="org.springboot.sample" level="ERROR">
</logger>
<logger name="com.xiaomayi.*" level="INFO">
</logger>
</springProfile>
<!--
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG
可以包含零个或多个appender元素。
-->
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
<!-- <appender-ref ref="LOGSTASH"/>-->
<!-- <appender-ref ref="FILE"/>-->
</root>
</configuration>