SpringBoot 项目中设置日记体系文件 logback-spring.xml 原理和用法介绍 ...

打印 上一主题 下一主题

主题 874|帖子 874|积分 2626

在 Spring Boot 项目中,logback-spring.xml 是用于设置日记体系的文件,是基于 Logback 框架,重要有以下几点功能:

  
1、日记输出控制



  • 可以指定哪些类或包的日记信息应该被输出,以及输出的日记级别。
  • 例如,可以将某些关键业务类的日记级别设置为 DEBUG,以便在开辟和测试阶段进行具体的日记记录,方便调试。
  • 将一些基础类或库的日记级别设置为 INFO 或 WARN,避免日记信息过多造成干扰。
  1. <logger name="com.example.business" level="DEBUG"/>
  2. <logger name="org.springframework" level="INFO"/>
复制代码
这里,com.example.business 包下的日记将以 DEBUG 级别输出,而 org.springframework 包下的日记以 INFO 级别输出。
2、日记格式设置



  • 可以自定义日记的输出格式,包括时间戳、日记级别、线程名、类名、日记消息等元素的排列顺序和格式。
  1. <encoder>
  2.         <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  3. </encoder>
复制代码
上述代码利用 %d 表现时间戳,%thread 表现线程名,%-5level 表现日记级别,%logger{36} 表现日记记录器名称,%msg%n 表现日记消息和换行符。
3、日记输出位置



  • 可以将日记输出到差异的目的地,常见的有控制台和文件。
  1. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  2.         <encoder>
  3.                 <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  4.         </encoder>
  5. </appender>
  6. <appender name="FILE" class="ch.qos.logback.core.FileAppender">
  7.         <file>/log/info/info.log</file>
  8.         <encoder>
  9.                 <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  10.         </encoder>
  11. </appender>
复制代码
上述代码中,CONSOLE 是一个将日记输出到控制台的 Appender,利用了前面定义的日记格式;FILE 是一个将日记输出到文件 /log/info/info.log 的 Appender。
4、日记滚动计谋



  • 对于输出到文件的日记,可以设置日记滚动计谋,以避免日记文件过大。
  1. <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  2.         <file>/log/info/info.log</file>
  3.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  4.                 <fileNamePattern>/log/info/info-%d{yyyy-MM-dd}.log</fileNamePattern>
  5.         </rollingPolicy>
  6.         <encoder>
  7.                 <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  8.         </encoder>
  9. </appender>
复制代码
上述代码利用 TimeBasedRollingPolicy 实现了基于时间的日记滚动,天天会天生一个新的日记文件,文件名为 /log/info/info-%d{yyyy-MM-dd}.log。
5、日记级别调整



  • 可以根据差异的情况(如开辟、测试、生产)动态调整日记级别。
  1. <springProfile name="dev">
  2.         <logger name="com.wen" level="DEBUG"/>
  3. </springProfile>
  4. <springProfile name="prod">
  5.         <logger name="com.wen" level="INFO"/>
  6. </springProfile>
复制代码
这里利用了 Spring Boot 的 springProfile 特性,在 dev 情况下将 com.wen 包的日记级别设置为 DEBUG,在 prod 情况下设置为 INFO。
6、日记条件过滤



  • 可以对日记信息进行过滤,只输出符合特定条件的日记。
  1. <appender name="FILTERED_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  2.         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  3.                 <level>INFO</level>
  4.         </filter>
  5.         <encoder>
  6.                 <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  7.         </encoder>
  8. </appender>
复制代码
上述代码利用 ThresholdFilter 过滤掉级别低于 INFO 的日记,只有 INFO 及以上级别的日记会被输出到控制台。
7、利用注意事项

1、日记文件所带来的优势:


  • 机动性:可以根据项目的具体需求,机动设置日记输出,满意差异阶段(开辟、测试、生产)和差异场景下的日记需求。
  • 性能优化:通过公道设置日记级别和输出目的地,可以避免不必要的日记输出,进步性能。
  • 可维护性:集中管理日记设置,便于维护和修改,避免在代码中硬编码日记相干的逻辑。
2、设置文件的加载顺序:
Spring Boot 在启动时会主动查找并加载 logback-spring.xml 文件,如果找不到,会实验加载 logback.xml 文件。发起利用 logback-spring.xml,由于它支持 Spring 的一些特别设置,如 springProfile,可以根据差异的情况进行差异的日记设置。


  • 设置文件中的文件路径必要根据现实情况进行调整,确保日记文件的存储位置具有足够的权限。
  • 差异的 Appender 可以组合利用,如同时输出到控制台和文件。
  • 对于复杂的日记设置,可以考虑将差异部门拆分成多个 <appender> 和 <logger>,以便于维护和管理。
8、完备示例代码

下面代码是一个项目的完备示例代码,利用了上述的一些情况,可用作常见的 SpringBoot 项目。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  3.         <property name="log.level" value="debug" />
  4.         <property name="log.maxHistory" value="30" />
  5.         <property name="log.filePath" value="log/project/" />
  6.        
  7.         <property name="log.pattern"
  8.                 value="%d{yyyy-MM-dd HH:mm:ss:SSS} | [%thread] | [%X{request-id}] | %-5level | %class.%M %L | %msg%n" />
  9.         <!-- 打印到控制台 -->
  10.         <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
  11.                 <encoder>
  12.                         <pattern>${log.pattern}</pattern>
  13.                         <charset>UTF-8</charset>
  14.                 </encoder>
  15.                 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  16.                         <level>INFO</level>
  17.                 </filter>
  18.         </appender>
  19.         <!-- INFO -->
  20.         <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  21.                 <file>${log.filePath}/info/info.log</file>
  22.                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  23.                         <!-- 文件名称 -->
  24.                         <fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd}.log
  25.                         </fileNamePattern>
  26.                         <!-- 文件最大历史数量 -->
  27.                         <maxHistory>${log.maxHistory}</maxHistory>
  28.                         <!-- 下面这俩可不定义 -->
  29.                         <maxFileSize>1GB</maxFileSize>
  30.                         <totalSizeCap>128GB</totalSizeCap>
  31.                 </rollingPolicy>
  32.                 <encoder>
  33.                         <pattern>${log.pattern}</pattern>
  34.                         <charset>UTF-8</charset>
  35.                 </encoder>
  36.                 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  37.                         <level>INFO</level>
  38.                 </filter>
  39.         </appender>
  40.         <!-- DEBUG -->
  41.         <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  42.                 <file>${log.filePath}/debug/debug.log</file>
  43.                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  44.                         <fileNamePattern>${log.filePath}/debug/%d{yyyy-MM-dd}.log
  45.                         </fileNamePattern>
  46.                         <maxHistory>${log.maxHistory}</maxHistory>
  47.                         <maxFileSize>1GB</maxFileSize>
  48.                         <totalSizeCap>128GB</totalSizeCap>
  49.                 </rollingPolicy>
  50.                 <encoder>
  51.                         <pattern>${log.pattern}</pattern>
  52.                         <charset>UTF-8</charset>
  53.                 </encoder>
  54.                 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  55.                         <level>DEBUG</level>
  56.                 </filter>
  57.         </appender>
  58.        
  59.         <!-- ERROR -->
  60.         <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  61.                 <!-- 文件路径 -->
  62.                 <file>${log.filePath}/error/error.log</file>
  63.                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  64.                         <!-- 文件名称 -->
  65.                         <fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd}.log
  66.                         </fileNamePattern>
  67.                         <!-- 文件最大历史数量 -->
  68.                         <maxHistory>${log.maxHistory}</maxHistory>
  69.                         <maxFileSize>1GB</maxFileSize>
  70.                         <totalSizeCap>128GB</totalSizeCap>
  71.                 </rollingPolicy>
  72.                 <encoder>
  73.                         <pattern>${log.pattern}</pattern>
  74.                         <charset>UTF-8</charset>
  75.                 </encoder>
  76.                 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  77.                         <level>ERROR</level>
  78.                 </filter>
  79.         </appender>
  80.         <logger name="org.redisson" level="info" additivity="false" />
  81.         <root level="INFO">
  82.                 <appender-ref ref="consoleAppender" />
  83.                 <appender-ref ref="debugAppender" />
  84.                 <appender-ref ref="infoAppender" />
  85.                 <appender-ref ref="errorAppender" />
  86.         </root>
  87. </configuration>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表