使用 Lombok log 管理项目日志

2021年03月11日 19:57 · 阅读(984) ·

开发环境

名称 版本
操作系统 Windows 10 X64
JDK JDK1.8(jdk-8u151-windows-x64)
IntelliJ IDEA IntelliJ IDEA 2018.3
Maven Maven 3.6.0
lombok 1.18.8

相关内容

IntelliJ IDEA 2018.3 安装 Lombok 插件

引用 lombok 使用 log 提示找不到符号

项目结构

pom.xml 引用

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.projectlombok</groupId>
  4. <artifactId>lombok</artifactId>
  5. <version>1.18.8</version>
  6. </dependency>
  7. </dependencies>

application.yml

  1. logging:
  2. config: classpath:logback-dev.xml

logback-dev.xml

  1. <!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
  2. <configuration scan="true" scanPeriod="10 seconds">
  3. <!--继承spring boot提供的logback配置-->
  4. <!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
  5. <!--设置系统日志目录-->
  6. <property name="APP_DIR" value="demo-eureka" />
  7. <!-- 彩色日志 -->
  8. <!-- 彩色日志依赖的渲染类 -->
  9. <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
  10. <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
  11. <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
  12. <!-- 彩色日志格式 -->
  13. <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}}"/>
  14. <!-- 控制台输出 -->
  15. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  16. <encoder>
  17. <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
  18. <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  19. </encoder>
  20. <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
  21. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  22. <level>info</level>
  23. </filter>
  24. </appender>
  25. <!-- 时间滚动输出 level为 DEBUG 日志 -->
  26. <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  27. <!-- 正在记录的日志文件的路径及文件名 -->
  28. <file>${LOG_PATH}/log_debug.log</file>
  29. <!--日志文件输出格式-->
  30. <encoder>
  31. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  32. <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  33. </encoder>
  34. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  35. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  36. <!--
  37. 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  38. 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
  39. -->
  40. <fileNamePattern>${LOG_PATH}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  41. <!--
  42. 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始,
  43. 命名日志文件,例如log-error-2017-04-26.0.log
  44. -->
  45. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  46. <maxFileSize>500MB</maxFileSize>
  47. </timeBasedFileNamingAndTriggeringPolicy>
  48. <!--日志文件保留天数-->
  49. <maxHistory>30</maxHistory>
  50. </rollingPolicy>
  51. <!-- 此日志文件只记录debug级别的 -->
  52. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  53. <level>debug</level>
  54. <onMatch>ACCEPT</onMatch>
  55. <onMismatch>DENY</onMismatch>
  56. </filter>
  57. </appender>
  58. <!-- 时间滚动输出 level为 INFO 日志 -->
  59. <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  60. <!-- 正在记录的日志文件的路径及文件名 -->
  61. <file>${LOG_PATH}/log_info.log</file>
  62. <!--日志文件输出格式-->
  63. <encoder>
  64. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  65. <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  66. </encoder>
  67. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  68. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  69. <!--
  70. 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  71. 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
  72. -->
  73. <fileNamePattern>${LOG_PATH}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  74. <!--
  75. 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始,
  76. 命名日志文件,例如log-error-2017-04-26.0.log
  77. -->
  78. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  79. <maxFileSize>500MB</maxFileSize>
  80. </timeBasedFileNamingAndTriggeringPolicy>
  81. <!--日志文件保留天数-->
  82. <maxHistory>30</maxHistory>
  83. </rollingPolicy>
  84. <!-- 此日志文件只记录info级别的 -->
  85. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  86. <level>info</level>
  87. <onMatch>ACCEPT</onMatch>
  88. <onMismatch>DENY</onMismatch>
  89. </filter>
  90. </appender>
  91. <!-- 时间滚动输出 level为 WARN 日志 -->
  92. <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  93. <!-- 正在记录的日志文件的路径及文件名 -->
  94. <file>${LOG_PATH}/log_warn.log</file>
  95. <!--日志文件输出格式-->
  96. <encoder>
  97. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  98. <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  99. </encoder>
  100. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  101. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  102. <!--
  103. 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  104. 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
  105. -->
  106. <fileNamePattern>${LOG_PATH}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  107. <!--
  108. 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始,
  109. 命名日志文件,例如log-error-2017-04-26.0.log
  110. -->
  111. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  112. <maxFileSize>500MB</maxFileSize>
  113. </timeBasedFileNamingAndTriggeringPolicy>
  114. <!--日志文件保留天数-->
  115. <maxHistory>30</maxHistory>
  116. </rollingPolicy>
  117. <!-- 此日志文件只记录warn级别的 -->
  118. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  119. <level>warn</level>
  120. <onMatch>ACCEPT</onMatch>
  121. <onMismatch>DENY</onMismatch>
  122. </filter>
  123. </appender>
  124. <!-- 时间滚动输出 level为 ERROR 日志 -->
  125. <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  126. <!-- 正在记录的日志文件的路径及文件名 -->
  127. <file>${LOG_PATH}/log_error.log</file>
  128. <!--日志文件输出格式-->
  129. <encoder>
  130. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  131. <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  132. </encoder>
  133. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  134. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  135. <!--
  136. 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  137. 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
  138. -->
  139. <fileNamePattern>${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  140. <!--
  141. 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始,
  142. 命名日志文件,例如log-error-2017-04-26.0.log
  143. -->
  144. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  145. <maxFileSize>500MB</maxFileSize>
  146. </timeBasedFileNamingAndTriggeringPolicy>
  147. <!--日志文件保留天数-->
  148. <maxHistory>30</maxHistory>
  149. </rollingPolicy>
  150. <!-- 此日志文件只记录ERROR级别的 -->
  151. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  152. <level>error</level>
  153. <onMatch>ACCEPT</onMatch>
  154. <onMismatch>DENY</onMismatch>
  155. </filter>
  156. </appender>
  157. <logger name="org.springframework.web" level="info"/>
  158. <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
  159. <!--name的属性值一定要是当前工程的java代码的完整目录,因为mybatis打印的日志级别是debug级别的,因此需要配置debug级别日志扫描的目录-->
  160. <logger name="com.demo.eureka" level="debug"/>
  161. <!--开发环境:打印控制台-->
  162. <!--<springProfile name="dev">-->
  163. <root level="info">
  164. <appender-ref ref="CONSOLE" />
  165. <appender-ref ref="DEBUG_FILE" />
  166. <appender-ref ref="INFO_FILE" />
  167. <appender-ref ref="WARN_FILE" />
  168. <appender-ref ref="ERROR_FILE" />
  169. </root>
  170. <!--</springProfile>-->
  171. <!--测试环境:打印控制台和输出到文件-->
  172. <springProfile name="test">
  173. <root level="info">
  174. <appender-ref ref="CONSOLE" />
  175. <appender-ref ref="INFO_FILE" />
  176. <appender-ref ref="WARN_FILE" />
  177. <appender-ref ref="ERROR_FILE" />
  178. </root>
  179. </springProfile>
  180. <!--生产环境:输出到文件-->
  181. <springProfile name="prod">
  182. <root level="info">
  183. <appender-ref ref="DEBUG_FILE" />
  184. <appender-ref ref="INFO_FILE" />
  185. <appender-ref ref="ERROR_FILE" />
  186. </root>
  187. </springProfile>
  188. </configuration>

测试

  1. public static void main(String[] args) {
  2. log.info("普通日志");
  3. log.warn("警告日志");
  4. log.error("错误日志");
  5. }

控制台打印

1.默认的情况

会在代码所在的目录 LOG_PATH_IS_UNDEFINED 下生成下面的日志

log_info.log

  1. 2021-03-11 19:36:34.186 [Thread-25] INFO com.demo.eureka.EurekaStateChangeListener - 普通日志

log_warn.log

  1. 2021-03-11 19:36:34.187 [Thread-25] WARN com.demo.eureka.EurekaStateChangeListener - 警告日志

log_error.log

  1. 2021-03-11 19:36:34.187 [Thread-25] ERROR com.demo.eureka.EurekaStateChangeListener - 错误日志

2.设置日志路径的情况

application.yml

  1. logging:
  2. config: classpath:logback-dev.xml
  3. path: /data/DATA_DIR/logs/demo/demo-eureka

运行程序,会在指定目录生成日志文件