logback浅析

结合spring-boot(2.3.6)使用

1.默认使用

logback浅析

spring-boot-start-web的依赖结构

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

启动项目就可以看到控制台打印的日志(不需要任何配置)
logback浅析

2.自定义logback配置文件

命名规则: logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback- spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项 https://blog.csdn.net/qq_23483671/article/details/105921858

2.1 yml可配置项

logging:
 config: classpath:logback-spring.xml
 logback:
   rollingpolicy: # 全局配置 可在xml对每个滚动策略单独配置
     file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log # linux 可以使用.gz结尾
     clean-history-on-start: false # 项目启动时是否删除之前的日志
     max-file-size: 10MB # 单个日志文件最大使用空间
     total-size-cap: 0B # 所有日志文件最大使用空间(单个滚动策略中)
     max-history: 7 # 保留归档个数

鼠标悬停可查看默认值
logback浅析

配置项详细解释可参考此处:https://blog.csdn.net/u012723183/article/details/107685109

2.2spring-boot xml 参考

spring-boot定义了以下四个可import的xml(搜索文件名称即可定位到文件所在位置)

defaults.xml
console-appender.xml
file-appender.xml
base.xml
2.2.1 defaults.xml
<?xml version="1.0" encoding="UTF-8"?>

<!--
Default logback configuration provided for import
-->

<included>
   <!-- 控制台日志颜色的支持 -->
   <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" />

   <!--
   1.控制台日志格式
   2.控制台日志编码
   3.文件日志格式
   4.文件日志编码
   且都设置有默认值 如: file.encoding:-UTF-8
   -->
   <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-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}}"/>
   <property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/>
   <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
   <property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/>

   <!--
   定义了下列指定类的日志级别
   但此处logger中并没有指定使用的appender,最终会交由root中使用的appender处理
   logback默认是向上传递的,也可以通过addtivity = "false"取消向上传递
   addtivity = "true" 自己使用appender,上级是 root, 那么日志会打印两次
   addtivity = "false" 自己没有使用appender,那么日志不会打印
   <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR" addtivity = "false"/>
   -->
   <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
   <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
   <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
   <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
   <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
   <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
   <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
   <logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/>
</included>
2.2.2 console-appender.xml
<?xml version="1.0" encoding="UTF-8"?>

<!--
Console appender logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<!--
定义了一个appender name 唯一标识 class 实现类
<pattern> 打印格式 使用定义的属性 ${CONSOLE_LOG_PATTERN}
<charset> 字符编码 使用定义的属性 ${CONSOLE_LOG_CHARSET}
这里面并没有 import defaults.xml 所以${CONSOLE_LOG_PATTERN} ${CONSOLE_LOG_CHARSET}是获取不到值得
-->
<included>
   <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
   	<encoder>
   		<pattern>${CONSOLE_LOG_PATTERN}</pattern>
   		<charset>${CONSOLE_LOG_CHARSET}</charset>
   	</encoder>
   </appender>
</included>
2.2.3 file-appender.xml
<?xml version="1.0" encoding="UTF-8"?>

<!--
File appender logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<included>
   <!--定义了一个appender 实现类是RollingFileAppender 滚动追加日志到文件中-->
   <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
   	<encoder>
   		<pattern>${FILE_LOG_PATTERN}</pattern>
   		<charset>${FILE_LOG_CHARSET}</charset>
   	</encoder>
   	<!--官方文档中这个可以不写-->
   	<file>${LOG_FILE}</file>
   	<!--
   	滚动策略 这五个配置项与yml可配置项一一对应

   	<cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
   	如果你配置了那么会使用你的配置项 如果没有配置那么就是默认值 false

   	你也可以固定写在xml中 那么配置项不会取代你的固定值
   	<cleanHistoryOnStart>false</cleanHistoryOnStart>
   	-->
   	<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
   		<fileNamePattern>${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern>
   		<cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
   		<maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize>
   		<totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap>
   		<maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-7}</maxHistory>
   	</rollingPolicy>
   </appender>
</included>
2.2.4 base.xml
<?xml version="1.0" encoding="UTF-8"?>

<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->

<included>
   <!--
   import 上述三个xml
   定义了一个 property
   -->
   <include resource="org/springframework/boot/logging/logback/defaults.xml" />
   <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
   <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
   <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
   <!--
   定义 <root> 级别为 INFO
   关于级别及规则: http://www.51gjie.com/javaweb/1109.html
   <appender> N个 可以为0
   <logger> N个 可以为0
   使用了导入xml中 name = CONSOLE/FILE 的两个 <appender>
   那么日志会分别打印到控制台和文件中
   -->
   <root level="INFO">
   	<appender-ref ref="CONSOLE" />
   	<appender-ref ref="FILE" />
   </root>
</included>

2.3 根据spring-boot的xml 写自己的xml

logback浅析

其中logback-xml文件夹下的xml可以分为三类
defaults.xml 定义一些基础属性 直接复制spring-boot即可
console-appender.xml 打印到控制台 直接复制spring-boot即可
debug-file-appender.xml error-file-appender.xml info-file-appender.xml 匹配不同级别的日志滚动追加到文件中

截取debug-file-append.xml说明

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

<!--
File appender logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<included>
   <!--appender的name一定是唯一的-->
   <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
   	<!--
   	过滤设置
   	<level> 级别为DEBUE
   	<onMatch> 获取到的打印请求级别匹配则处理
   	<onMismatch> 不匹配则抛弃
   	总结就是只处理 DEBUG 级别的打印请求
   	-->
   	<filter class="ch.qos.logback.classic.filter.LevelFilter">
   		<level>DEBUG</level>
   		<onMatch>ACCEPT</onMatch>
   		<onMismatch>DENY</onMismatch>
   	</filter>

   	<encoder>
   		<pattern>${FILE_LOG_PATTERN}</pattern>
   		<charset>${FILE_LOG_CHARSET}</charset>
   	</encoder>

   	<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
   		<!--
   		日志文件的完整路径规则
   		/%d{yyyy-MM-dd,aux} 每天归档一次
   		C:\logs\qd-data-service-center\2022-03-03\debug\2022-03-03-14.0.log
   		${LOG_FILE} 在logback-spring.xml 中设置为 C:/logs/qd-data-service-center
   		网上说路径最好使用绝地路径,经测试相对路径也是可行的(可能与版本有关)
   		-->
   		<fileNamePattern>${LOG_FILE}/%d{yyyy-MM-dd,aux}/debug/%d{yyyy-MM-dd-HH}.%i.log</fileNamePattern>
   		<cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
   		<maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize>
   		<totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap>
   		<maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-7}</maxHistory>
   	</rollingPolicy>
   </appender>
</included>

error-file-appender.xml
info-file-appender.xml 以下属性修改为不一样即可

  • appender name
  • filter level
  • rollingPolicy fileNamePattern

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan = "true" scanPeriod = "10 seconds">
   <property name="LOG_FILE" value="C:/logs/qd-data-service-center" />

   <include resource="logback-xml/defaults.xml" />
   <include resource="logback-xml/console-appender.xml" />
   <include resource="logback-xml/debug-file-appender.xml" />
   <include resource="logback-xml/info-file-appender.xml" />
   <include resource="logback-xml/error-file-appender.xml" />

   <!--
   可以定义不同环境的日志规则
   如: 开发环境 生产环境
   通过 spring.profiles.active=dev 指定(指定使用配置文件的参数)
   -->
   <springProfile name="dev">
       <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"/>
       </root>
   </springProfile>

   <springProfile name="pro">
       <root level="INFO">
           <appender-ref ref="DEBUG_FILE"/>
           <appender-ref ref="INFO_FILE"/>
           <appender-ref ref="WARN_FILE"/>
           <appender-ref ref="ERROR_FILE"/>
       </root>
   </springProfile>
</configuration>

2022-03-03 15:53:53 星期四

上一篇:Wireless Network——简单并查集


下一篇:python用list比queue快?