ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

logback浅析

2022-03-03 16:00:34  阅读:163  来源: 互联网

标签:xml LOG spring boot FILE logback 浅析


结合spring-boot(2.3.6)使用

1.默认使用

image

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

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

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

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 # 保留归档个数

鼠标悬停可查看默认值
image

配置项详细解释可参考此处: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

image

其中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 星期四

标签:xml,LOG,spring,boot,FILE,logback,浅析
来源: https://www.cnblogs.com/ry-junmoxiao/p/15956238.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有