经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
Spring Boot Logback配置日志过程解析
来源:jb51  时间:2019/10/31 8:39:09  对本文有异议

这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

出于性能等原因,Logback 目前是springboot应用日志的标配; 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式。

配置时考虑点

  • 支持日志路径,日志level等配置
  • 日志控制配置通过application.yml下发
  • 按天生成日志,当天的日志>50MB回滚
  • 最多保存10天日志
  • 生成的日志中Pattern自定义
  • Pattern中添加用户自定义的MDC字段,比如用户信息(当前日志是由哪个用户的请求产生),request信息。此种方式可以通过AOP切面控制,在MDC中添加requestID,在spring-logback.xml中配置Pattern。
  • 根据不同的运行环境设置Profile - dev,test,product
  • 对控制台,Err和全量日志分别配置
  • 对第三方包路径日志控制

实现范例

如下两个例子基本包含了上述的考虑点:

综合范例

application.yml

  1. logging:
  2. level:
  3. root: debug
  4. path: C:/data/logs/springboot-logback-demo
  5. server:
  6. port: 8080
  7. spring:
  8. application:
  9. name: springboot-logback-demo
  10. debug: false

Spring-logback.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.  
  4. <!-- 日志根目录-->
  5. <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="/data/logs/springboot-logback-demo"/>
  6.  
  7. <!-- 日志级别 -->
  8. <springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root" defaultValue="DEBUG"/>
  9.  
  10. <!-- 标识这个"STDOUT" 将会添加到这个logger -->
  11. <springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/>
  12.  
  13. <!-- 日志文件名称-->
  14. <property name="LOG_PREFIX" value="spring-boot-logback" />
  15.  
  16. <!-- 日志文件编码-->
  17. <property name="LOG_CHARSET" value="UTF-8" />
  18.  
  19. <!-- 日志文件路径+日期-->
  20. <property name="LOG_DIR" value="${LOG_HOME}/%d{yyyyMMdd}" />
  21.  
  22. <!--对日志进行格式化-->
  23. <property name="LOG_MSG" value="- | [%X{requestUUID}] | [%d{yyyyMMdd HH:mm:ss.SSS}] | [%level] | [${HOSTNAME}] | [%thread] | [%logger{36}] | --> %msg|%n "/>
  24.  
  25. <!--文件大小,默认10MB-->
  26. <property name="MAX_FILE_SIZE" value="50MB" />
  27.  
  28. <!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
  29. <property name="MAX_HISTORY" value="10"/>
  30.  
  31. <!--输出到控制台-->
  32. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  33. <!-- 输出的日志内容格式化-->
  34. <layout class="ch.qos.logback.classic.PatternLayout">
  35. <pattern>${LOG_MSG}</pattern>
  36. </layout>
  37. </appender>
  38.  
  39. <!--输出到文件-->
  40. <appender name="0" class="ch.qos.logback.core.rolling.RollingFileAppender">
  41. </appender>
  42.  
  43. <!-- 定义 ALL 日志的输出方式:-->
  44. <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
  45. <!--日志文件路径,日志文件名称-->
  46. <File>${LOG_HOME}/all_${LOG_PREFIX}.log</File>
  47.  
  48. <!-- 设置滚动策略,当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB -->
  49. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  50.  
  51. <!--日志文件路径,新的 ALL 日志文件名称,“ i ” 是个变量 -->
  52. <FileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%i.log</FileNamePattern>
  53.  
  54. <!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
  55. <MaxHistory>${MAX_HISTORY}</MaxHistory>
  56.  
  57. <!--当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB-->
  58. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  59. <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
  60. </timeBasedFileNamingAndTriggeringPolicy>
  61.  
  62. </rollingPolicy>
  63.  
  64. <!-- 输出的日志内容格式化-->
  65. <layout class="ch.qos.logback.classic.PatternLayout">
  66. <pattern>${LOG_MSG}</pattern>
  67. </layout>
  68. </appender>
  69.  
  70. <!-- 定义 ERROR 日志的输出方式:-->
  71. <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
  72. <!-- 下面为配置只输出error级别的日志 -->
  73. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  74. <level>ERROR</level>
  75. <OnMismatch>DENY</OnMismatch>
  76. <OnMatch>ACCEPT</OnMatch>
  77. </filter>
  78. <!--日志文件路径,日志文件名称-->
  79. <File>${LOG_HOME}/err_${LOG_PREFIX}.log</File>
  80.  
  81. <!-- 设置滚动策略,当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB -->
  82. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  83.  
  84. <!--日志文件路径,新的 ERR 日志文件名称,“ i ” 是个变量 -->
  85. <FileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%i.log</FileNamePattern>
  86.  
  87. <!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
  88. <MaxHistory>${MAX_HISTORY}</MaxHistory>
  89.  
  90. <!--当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB-->
  91. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  92. <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
  93. </timeBasedFileNamingAndTriggeringPolicy>
  94. </rollingPolicy>
  95.  
  96. <!-- 输出的日志内容格式化-->
  97. <layout class="ch.qos.logback.classic.PatternLayout">
  98. <Pattern>${LOG_MSG}</Pattern>
  99. </layout>
  100. </appender>
  101.  
  102. <!-- additivity 设为false,则logger内容不附加至root ,配置以配置包下的所有类的日志的打印,级别是 ERROR-->
  103. <logger name="org.springframework" level="ERROR" />
  104. <logger name="org.apache.commons" level="ERROR" />
  105. <logger name="org.apache.zookeeper" level="ERROR" />
  106. <logger name="com.alibaba.dubbo.monitor" level="ERROR"/>
  107. <logger name="com.alibaba.dubbo.remoting" level="ERROR" />
  108.  
  109. <!-- ${LOG_ROOT_LEVEL} 日志级别 -->
  110. <root level="${LOG_ROOT_LEVEL}">
  111.  
  112. <!-- 标识这个"${STDOUT}"将会添加到这个logger -->
  113. <appender-ref ref="${STDOUT}"/>
  114.  
  115. <!-- FILE_ALL 日志输出添加到 logger -->
  116. <appender-ref ref="FILE_ALL"/>
  117.  
  118. <!-- FILE_ERROR 日志输出添加到 logger -->
  119. <appender-ref ref="FILE_ERROR"/>
  120. </root>
  121.  
  122. </configuration>

Profile 相关的配置可以参考:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <include resource="org/springframework/boot/logging/logback/base.xml" />
  4. <!-- roll by day -->
  5. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  6. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  7. <fileNamePattern>logs/springboot-logback-demo.%d{yyyy-MM-dd}.log</fileNamePattern>
  8. <maxHistory>30</maxHistory>
  9. </rollingPolicy>
  10. <encoder>
  11. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
  12. </encoder>
  13. </appender>
  14. <!-- dev -->
  15. <logger name="org.springframework.web" level="INFO"/>
  16. <root level="INFO">
  17. <appender-ref ref="FILE" />
  18. </root>
  19.  
  20. <!-- test or production -->
  21. <springProfile name="test,prod">
  22. <logger name="org.springframework.web" level="INFO"/>
  23. <logger name="com.pdai.springboot" level="INFO"/>
  24. <root level="INFO">
  25. <appender-ref ref="FILE" />
  26. </root>
  27. </springProfile>
  28. </configuration>

參考文档

Logback官网

https://logback.qos.ch/manual/layouts.html#conversionWord

Logback官网 文档

https://logback.qos.ch/manual/index.html

Logback中Encoder Pattern

  1. <encoder>
  2. <pattern>%d{HH:mm:ss} [%thread][%X{traceId}] %-5level %logger{36} - %msg%n</pattern>
  3. </encoder>

https://logback.qos.ch/manual/layouts.html#conversionWord

代码示例

@See  https://github.com/realpdai/springboot-logback-demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号