1. logback-spring配置

image.png

1. 根节点:configuration

标签是根节点,包含以下属性:

  1. scan: 当此属性为true时,配置文件发生改变,将会被重新加载,默认值true
  2. scanPeriod:检测配置文件是否有修改时间间隔,如果没有自定时间单位,默认是毫秒(ms)。当scan为true,此scan为true,此时生效,默认时间间隔1分钟。
  3. debug:此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态,默认值false
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  3. <!-- 其他配置 -->
  4. </configuration>

2. property 和 springProperty
  1. : 可以直接设置

设置名为logFile的变量,后续则可以直接使用${logFile} 方式引用到该值 “logs/mutest”

  1. :配置成yml文件中的内容

同样使用${logFile},但是,值是采用source文件指定的。 log: file: logs/mutest

3. root

root节点,为必选节点。用来指定最基础的日志输出级别,并指定

… …

4. appender

节点是非常关键的节点,负责格式化一个日志输出节点(也就是描述日志存储类型、位置、滚动规则等属性)。感觉: appender类似是一个日志模板,而logger则是日志的输出者,使用某个appender模板来写日志。 appender有三种类型: ConsoleAppender(控制台日志)、FileAppender(文件日志)、RollingFileAppender(滚动文件日志)。

4.1 ConsoleAppender
ConsoleAppender作用是将日志输出到控制台,一般在本地调试的时候使用,配置非常简单。一个典型的ConsoleAppender,有两大属性:
a. name: appender节点的名称,后文中被logger节点引用。在一个logback配置文件中不能重复。
b. class:使用何种日志输出策略,分别是ConsoleAppender(控制台日志)、FileAppender(文件日志)、RollingFilAppender

  1. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  2. <encoder>
  3. <pattern>%d [%thread] %-5level %logger{50} -[%file:%line]- %msg%n</pattern>
  4. <charset>UTF-8</charset>
  5. </encoder>
  6. </appender>

4.2 FileAppender
FileAppender用来把日志添加到文件。例如:

  1. <appender name="FILE" class="ch.qos.logback.core.FileAppender">
  2. <file>testFile.log</file>
  3. <append>true</append>
  4. <encoder>
  5. <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
  6. </encoder>
  7. </appender>

跟ConsoleAppender对比,多了一些子节点:

  1. :被写入文件名,可相当目录,也可是绝对目录,如果上级目录不存在就会自动创建,没有默认值
  2. :如果为true,日志被追加到文件结尾;如果是false,清空现存文件。默认为true
  3. :对记录时间进行格式化。
  4. :如果是true,日志会被安全写入文件,即使其他的FileAppender也在向此文件写入操作,效率低。所以默认是false
  5. :日志的输出格式
  1. <!-- lOGGER PATTERN 根据个人喜好选择匹配 -->
  2. <property name="logPattern"
  3. value="[ %-5level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] %logger{15} [%line]- %msg%n"/>
  1. %date:表示日期
  2. %thread:表示线程名
  3. %-5level:表示级别从左显示5个字符宽度
  4. %logger{15}:表示logger名字最长是15个字符
  5. %file-%line: 表示 文件及行数
  6. %msg:表示日志消息
  7. %n: 换行符

4.3 RollingFileAppender
RollingFileAppender 用于滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。一个典型的RollingFileAppender节点:

  1. <configuration>
  2. <!--直接定义属性-->
  3. <property name="logFile" value="logs/mutest"/>
  4. <property name="maxFileSize" value="30MB"/>
  5. <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
  6. <!--日志文件存储路径,来自property设置-->
  7. <file>${logFile}.log</file>
  8. <encoder>
  9. <pattern>%d [%thread] %-5level -[%file:%line]- %msg%n</pattern>
  10. <charset>UTF-8</charset>
  11. </encoder>
  12. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  13. <!--每天生成一个新的活动日志文件,旧的日志归档,后缀名为2019.08.12这种格式-->
  14. <fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  15. <!--活动日志文件最大值,超过这个值将产生新日志文件-->
  16. <maxFileSize>${maxFileSize}</maxFileSize>
  17. <!--只保留最近30天的日志-->
  18. <maxHistory>30</maxHistory>
  19. <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
  20. <totalSizeCap>1GB</totalSizeCap>
  21. </rollingPolicy>
  22. <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
  23. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  24. <level>error</level>
  25. <onMatch>ACCEPT</onMatch>
  26. <onMismatch>DENY</onMismatch>
  27. </filter>
  28. </appender>
  29. </configuration>

常用的子节点:

:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。

:日志输出拦截器,可自定义拦截也可用系统定义好的拦截器。

:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。

  1. SizeAndTimeBaseRollingPolicy:根据日志文件大小和时间周期作为切割条件,满足任意一个就进行切分。maxFileSize,设置决定当天日志文件大小上限,超过设置上限,同一天将有多个日志文件,${logFile}.%d{yyyy-MM-dd}.%i

  2. imeBasedRollingPolicy:只以时间周期为切分条件,在这种策略下,存档日志名称格式设置为${logFile}.%d{yyyy-MM-dd}.log即可。

  3. SizeBasedTriggeringPolicy:只以文件大小为切分条件,在这种策略下,日志滚动的唯一触发条件。


  4. 滚动策略:
  • :这是活动文件的大小,SizeAndTimeBasedRollingPolicy策略和SizeBasedTriggeringPolicy策略下必须有。默认值是10MB。超过这个大小,就要生成新的活动文件了。
  • :可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删。
  • :可选节点,表示日志文件总大小超过1GB将删除存档日志文件。
  1. <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  2. <encoder>
  3. <!--日期 日志等级 线程名 类路径 方法名 行号 打印信息 换行-->
  4. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{20}.%M\(%F:%L\): %msg%n</pattern>
  5. </encoder>
  6. <file>${BASE_PATH}/app.log</file>
  7. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  8. <fileNamePattern>${BASE_PATH}/%d{yyyy-MM-dd}/app.%i.log</fileNamePattern>
  9. <maxFileSize>500MB</maxFileSize>
  10. <maxHistory>30</maxHistory>
  11. <totalSizeCap>20GB</totalSizeCap>
  12. </rollingPolicy>
  13. </appender>
  14. <!-- 错误日志的配置 -->
  15. <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  16. <Append>true</Append>
  17. <file>${BASE_PATH}/app-error.log</file>
  18. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  19. <fileNamePattern>${BASE_PATH}/%d{yyyy-MM-dd}/app-error.%i.log</fileNamePattern>
  20. <maxFileSize>500MB</maxFileSize>
  21. <maxHistory>30</maxHistory>
  22. <totalSizeCap>20GB</totalSizeCap>
  23. </rollingPolicy>
  24. <encoder>
  25. <pattern>
  26. <![CDATA[[%d{yyyy-MM-dd HH:mm:ss.SSSZ} ] - %X{method} %X{requestURIWithQueryString} [ip=%X{remoteAddr}, ref=%X{referrer}, ua=%X{userAgent}, sid=%X{cookie.JSESSIONID}]%n %-5level %logger{35} - %m%n]]>
  27. </pattern>
  28. </encoder>
  29. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  30. <level>ERROR</level>
  31. <onMatch>ACCEPT</onMatch>
  32. <onMismatch>DENY</onMismatch>
  33. </filter>
  34. </appender>

4.5 logger节点
logger节点为可选节点,作用是指明具体的包或类的日志输出级别,以及要使用的

  1. <!-- name 属性表示匹配的logger类型前缀 -->
  2. <logger name="com.mutest.demo">
  3. <level value="INFO" />
  4. <!-- 引用的appender,类似于spring的ref -->
  5. <appender-ref ref="fileLog" />
  6. <appender-ref ref="STDOUT" />
  7. </logger>
  1. name:必写属性,指定具体包或类,被指定的包或类中的日志输出将遵从该logger规定配置。
  2. level:非必写属性,指定日志输出级别,该级别将覆盖root配置的输出级别。
  3. addtivity:非必写属性,是否向上级loger传递打印信息。默认是true。

additivity的作用在于当前logger是否使用上级logeer(一般是root logger)配置的appender进行输出。

  • false:表示只用当前logger的appender-ref。
  • true:表示当前logger的appender-ref和rootLogger的appender-ref都有效。
    1. appender-ref:引用的appender,引用后将实现appender中定义的行为,例如上面示例中引用了fileLog这个appender,那么com.mutest.demo中打印的日志将按fileLog的配置进行记录。一个logger可以有多个引用,互不影响。

2. logback 跟 logback-spring的说明

logback.xml 和 logback-spring.xml 都可以用来配置logback,但是2者的加载顺序是不一样的(logback.xml 由日志框架加载,而 logback-spring.xml 由SpringBoot来加载)。
①logback.xml—->②application.properties—->③logback-spring.xml

3. DEMO

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
  3. <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
  4. <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
  5. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  6. <!-- logback项目名称 -->
  7. <!-- <property name="appName" value="station"/> -->
  8. <!-- 由于logback-spring的加载顺序在application.properties之后,所以可以将项目名取properties的配置 -->
  9. <springProperty name="appName" source="spring.application.name" />
  10. <!-- 日志路径-->
  11. <!--<property name="logPath" value="/usr/local/dsa5200/filedata/logs"/>-->
  12. <springProperty name="logPath" source="log.filePath" />
  13. <!-- 日志级别 DEBUG INFO WARN ERROR -->
  14. <property name="logLevel" value="INFO"/>
  15. <!-- 是否向上级loger传递打印信息 -->
  16. <property name="additivity" value="false"/>
  17. <!-- 最大保存时间 30天-->
  18. <property name="maxHistory" value="1"/>
  19. <!-- 单文件对大容量 -->
  20. <property name="maxFileSize" value="1KB" />
  21. <!-- 日志文件总大小-->
  22. <property name="totalSizeCap" value="3KB" />
  23. <!-- 异步缓冲队列的深度,该值会影响性能.默认值为256 -->
  24. <property name="queueSize" value="256"/>
  25. <!-- lOGGER PATTERN 根据个人喜好选择匹配 -->
  26. <!--日期 日志等级 线程名 类路径 方法名 行号 打印信息 换行-->
  27. <property name="logPattern" value="[ %-5level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] %logger{16} [%line]- %msg%n"/>
  28. <!-- 动态日志级别 -->
  29. <jmxConfigurator/>
  30. <!-- 控制台的标准输出 -->
  31. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  32. <encoder>
  33. <charset>UTF-8</charset>
  34. <pattern>${logPattern}</pattern>
  35. </encoder>
  36. </appender>
  37. <!-- DEBUG 日志记录 -->
  38. <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  39. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  40. <level>DEBUG</level>
  41. <onMatch>ACCEPT</onMatch>
  42. <onMismatch>DENY</onMismatch>
  43. </filter>
  44. <file>${logPath}/${appName}_debug.log</file>
  45. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  46. <fileNamePattern>${logPath}/debug/${appName}_debug.log.%d{yyyy-MM-dd}.%i.log </fileNamePattern>
  47. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  48. <maxFileSize>${maxFileSize}</maxFileSize>
  49. <!--日志文件保留天数-->
  50. <maxHistory>${maxHistory}</maxHistory>
  51. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  52. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  53. </rollingPolicy>
  54. <encoder>
  55. <pattern>${logPattern}</pattern>
  56. </encoder>
  57. </appender>
  58. <!-- INFO 级别的日志记录 -->
  59. <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  60. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  61. <level>INFO</level>
  62. <onMatch>ACCEPT</onMatch>
  63. <onMismatch>DENY</onMismatch>
  64. </filter>
  65. <file>${logPath}/${appName}_info.log</file>
  66. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  67. <fileNamePattern>${logPath}/info/${appName}_info.log.%d{yyyy-MM-dd}.%i.log.zip </fileNamePattern>
  68. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  69. <maxFileSize>${maxFileSize}</maxFileSize>
  70. <!--日志文件保留天数-->
  71. <maxHistory>${maxHistory}</maxHistory>
  72. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  73. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  74. </rollingPolicy>
  75. <encoder>
  76. <pattern>${logPattern}</pattern>
  77. </encoder>
  78. </appender>
  79. <!-- WARN 级别的日志记录 -->
  80. <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
  81. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  82. <level>WARN</level>
  83. <onMatch>ACCEPT</onMatch>
  84. <onMismatch>DENY</onMismatch>
  85. </filter>
  86. <file>${logPath}/${appName}_warn.log</file>
  87. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  88. <fileNamePattern>${logPath}/warn/${appName}_warn.log.%d{yyyy-MM-dd}.%i.log </fileNamePattern>
  89. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  90. <maxFileSize>${maxFileSize}</maxFileSize>
  91. <!--日志文件保留天数-->
  92. <maxHistory>${maxHistory}</maxHistory>
  93. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  94. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  95. </rollingPolicy>
  96. <encoder>
  97. <pattern>${logPattern}</pattern>
  98. </encoder>
  99. </appender>
  100. <!-- Error 级别的日志记录 -->
  101. <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
  102. <!--级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志-->
  103. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  104. <!--设置过滤级别-->
  105. <level>ERROR</level>
  106. <!--用于配置符合过滤条件的操作-->
  107. <onMatch>ACCEPT</onMatch>
  108. <!--用于配置不符合过滤条件的操作-->
  109. <onMismatch>DENY</onMismatch>
  110. </filter>
  111. <file>${logPath}/${appName}_error.log</file>
  112. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  113. <fileNamePattern>${logPath}/error/${appName}_error.log.%d{yyyy-MM-dd}.%i.log </fileNamePattern>
  114. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  115. <maxFileSize>${maxFileSize}</maxFileSize>
  116. <!--日志文件保留天数-->
  117. <maxHistory>${maxHistory}</maxHistory>
  118. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  119. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  120. </rollingPolicy>
  121. <encoder>
  122. <pattern>${logPattern}</pattern>
  123. </encoder>
  124. </appender>
  125. <!-- ASYNC_LOG_DEBUG -->
  126. <appender name="ASYNC_LOG_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
  127. <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
  128. <discardingThreshold>20</discardingThreshold>
  129. <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
  130. <queueSize>${queueSize}</queueSize>
  131. <!-- 添加附加的appender,最多只能添加一个 -->
  132. <appender-ref ref="FILE_DEBUG"/>
  133. </appender>
  134. <!-- ASYNC_LOG_INFO -->
  135. <appender name="ASYNC_LOG_INFO" class="ch.qos.logback.classic.AsyncAppender">
  136. <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
  137. <discardingThreshold>20</discardingThreshold>
  138. <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
  139. <queueSize>${queueSize}</queueSize>
  140. <!-- 添加附加的appender,最多只能添加一个 -->
  141. <appender-ref ref="FILE_INFO"/>
  142. </appender>
  143. <!-- ASYNC_LOG_WARN -->
  144. <appender name="ASYNC_LOG_WARN" class="ch.qos.logback.classic.AsyncAppender">
  145. <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
  146. <discardingThreshold>20</discardingThreshold>
  147. <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
  148. <queueSize>${queueSize}</queueSize>
  149. <appender-ref ref="FILE_WARN"/>
  150. </appender>
  151. <!--ASYNC_LOG_ERROR -->
  152. <appender name="ASYNC_LOG_ERROR" class="ch.qos.logback.classic.AsyncAppender">
  153. <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
  154. <discardingThreshold>20</discardingThreshold>
  155. <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
  156. <queueSize>${queueSize}</queueSize>
  157. <appender-ref ref="FILE_ERROR"/>
  158. </appender>
  159. <!-- 根据不同功能设置不同的模板 -->
  160. <appender name="WEBSOCKET_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  161. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  162. <fileNamePattern>${logPath}/websocket/websocket_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  163. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  164. <maxFileSize>${maxFileSize}</maxFileSize>
  165. <!--日志文件保留天数-->
  166. <maxHistory>${maxHistory}</maxHistory>
  167. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  168. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  169. </rollingPolicy>
  170. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  171. <layout class="ch.qos.logback.classic.PatternLayout">
  172. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  173. <pattern>${logPattern}</pattern>
  174. </layout>
  175. <charset>UTF-8</charset>
  176. </encoder>
  177. </appender>
  178. <appender name="MQTT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  179. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  180. <fileNamePattern>${logPath}/mq/mqtt_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  181. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  182. <maxFileSize>${maxFileSize}</maxFileSize>
  183. <!--日志文件保留天数-->
  184. <maxHistory>${maxHistory}</maxHistory>
  185. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  186. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  187. </rollingPolicy>
  188. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  189. <layout class="ch.qos.logback.classic.PatternLayout">
  190. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  191. <pattern>${logPattern}</pattern>
  192. </layout>
  193. <charset>UTF-8</charset>
  194. </encoder>
  195. </appender>
  196. <appender name="GRPC_PROVIDER_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  197. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  198. <fileNamePattern>${logPath}/grpc/provider/grpc_provider_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  199. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  200. <maxFileSize>${maxFileSize}</maxFileSize>
  201. <!--日志文件保留天数-->
  202. <maxHistory>${maxHistory}</maxHistory>
  203. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  204. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  205. </rollingPolicy>
  206. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  207. <layout class="ch.qos.logback.classic.PatternLayout">
  208. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  209. <pattern>${logPattern}</pattern>
  210. </layout>
  211. <charset>UTF-8</charset>
  212. </encoder>
  213. </appender>
  214. <appender name="GRPC_CONSUMER_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  215. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  216. <!-- yyyy-MM-dd 时间策略则为一天一个文件 -->
  217. <fileNamePattern>${logPath}/grpc/consumer/grpc_consumer_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  218. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  219. <maxFileSize>${maxFileSize}</maxFileSize>
  220. <!--日志文件保留天数-->
  221. <maxHistory>${maxHistory}</maxHistory>
  222. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  223. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  224. </rollingPolicy>
  225. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  226. <!-- layout 负责把事件转换成字符串,格式化的日志信息的输出 -->
  227. <layout class="ch.qos.logback.classic.PatternLayout">
  228. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  229. <pattern>${logPattern}</pattern>
  230. </layout>
  231. <charset>UTF-8</charset>
  232. </encoder>
  233. </appender>
  234. <appender name="QUARTZ_PATROL_TASK" class="ch.qos.logback.core.rolling.RollingFileAppender">
  235. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  236. <fileNamePattern>${logPath}/quartz/job_run_task_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  237. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  238. <maxFileSize>${maxFileSize}</maxFileSize>
  239. <!--日志文件保留天数-->
  240. <maxHistory>${maxHistory}</maxHistory>
  241. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  242. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  243. </rollingPolicy>
  244. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  245. <layout class="ch.qos.logback.classic.PatternLayout">
  246. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  247. <pattern>${logPattern}</pattern>
  248. </layout>
  249. <charset>UTF-8</charset>
  250. </encoder>
  251. </appender>
  252. <appender name="OPERATOR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  253. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  254. <fileNamePattern>${logPath}/operator-log/operator_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  255. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  256. <maxFileSize>${maxFileSize}</maxFileSize>
  257. <!--日志文件保留天数-->
  258. <maxHistory>${maxHistory}</maxHistory>
  259. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  260. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  261. </rollingPolicy>
  262. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  263. <layout class="ch.qos.logback.classic.PatternLayout">
  264. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  265. <pattern>${logPattern}</pattern>
  266. </layout>
  267. <charset>UTF-8</charset>
  268. </encoder>
  269. </appender>
  270. <appender name="APP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  271. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  272. <fileNamePattern>${logPath}/app/app_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  273. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  274. <maxFileSize>${maxFileSize}</maxFileSize>
  275. <!--日志文件保留天数-->
  276. <maxHistory>${maxHistory}</maxHistory>
  277. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  278. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  279. </rollingPolicy>
  280. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  281. <layout class="ch.qos.logback.classic.PatternLayout">
  282. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  283. <pattern>${logPattern}</pattern>
  284. </layout>
  285. <charset>UTF-8</charset>
  286. </encoder>
  287. </appender>
  288. <!--定时启动任务日志-->
  289. <logger name="com.qif.patrolstation.stationapp.task.service.StartTaskQuartzJobBean" level="${logLevel}" additivity="${additivity}">
  290. <appender-ref ref="QUARTZ_PATROL_TASK"/>
  291. </logger>
  292. <logger name="com.qif.patrolstation.stationapp.consumer" level="${logLevel}" additivity="${additivity}">
  293. <appender-ref ref="GRPC_CONSUMER_LOG"/>
  294. </logger>
  295. <logger name="com.qif.patrolstation.stationapp.provider" level="${logLevel}" additivity="${additivity}">
  296. <appender-ref ref="GRPC_PROVIDER_LOG"/>
  297. </logger>
  298. <logger name="com.qif.patrolstation.stationapp.mqtt.handle" level="${logLevel}" additivity="${additivity}">
  299. <appender-ref ref="MQTT_LOG"/>
  300. </logger>
  301. <logger name="com.qif.dsa.log" level="${logLevel}" additivity="false">
  302. <appender-ref ref="OPERATOR_LOG"/>
  303. </logger>
  304. <logger name="com.mhz.base.quartz " level="${logLevel}" additivity="false">
  305. <appender-ref ref="APP_LOG"/>
  306. </logger>
  307. <logger name="com.qif.patrolstation.stationapp.record" level="${logLevel}" additivity="false">
  308. <appender-ref ref="APP_LOG"/>
  309. </logger>
  310. <logger name="com.qif.patrolstation.stationapp.report" level="${logLevel}" additivity="false">
  311. <appender-ref ref="APP_LOG"/>
  312. </logger>
  313. <logger name="com.qif.patrolstation.stationapp.linkage" level="${logLevel}" additivity="false">
  314. <appender-ref ref="APP_LOG"/>
  315. </logger>
  316. <logger name="com.qif.patrolstation.stationapp.task" level="${logLevel}" additivity="false">
  317. <appender-ref ref="APP_LOG"/>
  318. </logger>
  319. <logger name="org.apache.commons.beanutils" level="error" additivity="false"/>
  320. <logger name="org.springframework.scheduling.quartz" level="info" additivity="false"/>
  321. <logger name="org.quartz" level="info" additivity="false" />
  322. <!--
  323. <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
  324. <logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。
  325. name:用来指定受此logger约束的某一个包或者具体的某一个类。
  326. level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
  327. 还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。
  328. 如果未设置此属性,那么当前logger将会继承上级的级别。
  329. addtivity:是否向上级logger传递打印信息。默认是true。
  330. <logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger
  331. -->
  332. <!--<logger name="org.springframework.web" level="info"/>-->
  333. <!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>-->
  334. <!--
  335. 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
  336. 第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
  337. 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
  338. -->
  339. <!--
  340. root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
  341. level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
  342. 不能设置为INHERITED或者同义词NULL。默认是DEBUG
  343. 可以包含零个或多个元素,标识这个appender将会添加到这个logger。
  344. -->
  345. <!--开发环境:打印控制台-->
  346. <!--<springProfile name="dev">-->
  347. <!-- <logger name="com.banuit.questions" level="debug"/> -->
  348. <!--</springProfile>-->
  349. <!--生产环境:输出到文件-->
  350. <!--<springProfile name="pro">-->
  351. <!--<root level="info">-->
  352. <!--<appender-ref ref="CONSOLE" />-->
  353. <!--<appender-ref ref="DEBUG_FILE" />-->
  354. <!--<appender-ref ref="INFO_FILE" />-->
  355. <!--<appender-ref ref="ERROR_FILE" />-->
  356. <!--<appender-ref ref="WARN_FILE" />-->
  357. <!--</root>-->
  358. <!--</springProfile>-->
  359. <!--docker日志对接的是控制台,所以没必要区分环境,如果是传统的war包外部部署,需要区分环境,配合springProfile使用即可-->
  360. <root level="${logLevel}">
  361. <!-- 控制台 -->
  362. <appender-ref ref="STDOUT"/>
  363. <appender-ref ref="ASYNC_LOG_DEBUG"/>
  364. <appender-ref ref="ASYNC_LOG_INFO"/>
  365. <appender-ref ref="ASYNC_LOG_WARN"/>
  366. <appender-ref ref="ASYNC_LOG_ERROR"/>
  367. </root>
  368. </configuration>
  1. <!-- 配置文件加载顺序: logback.xml > application.yml > logback-spring.xml -->
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <configuration>
  4. <!-- https://github.com/spring-projects/spring-boot/blob/v1.5.13.RELEASE/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml -->
  5. <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  6. <!-- logback项目名称 -->
  7. <!-- <property name="appName" value="station"/> -->
  8. <!-- 由于logback-spring的加载顺序在application.properties之后,所以可以将项目名取properties的配置 -->
  9. <springProperty name="APP_NAME" source="spring.application.name" />
  10. <!-- 日志路径-->
  11. <springProperty name="LOG_PATH" source="logging.filePath" />
  12. <!-- 日志级别 DEBUG INFO WARN ERROR -->
  13. <property name="logLevel" value="INFO"/>
  14. <!-- 是否向上级logger传递打印信息 -->
  15. <property name="additivity" value="false"/>
  16. <!-- 最大保存时间 30天-->
  17. <property name="maxHistory" value="1"/>
  18. <!-- 单文件对大容量 -->
  19. <property name="maxFileSize" value="1KB" />
  20. <!-- 日志文件总大小-->
  21. <property name="totalSizeCap" value="3KB" />
  22. <!-- lOGGER PATTERN 根据个人喜好选择匹配 -->
  23. <!--日期 日志等级 线程名 类路径 方法名 行号 打印信息 换行-->
  24. <property name="LOG_PATTERN" value="[%date{yyyy-MM-dd HH:mm:ss.SSS} [ %level] [traceId:%X{EAGLEEYE_TRACE_ID}] [%class:%line] - %m %n]"/>
  25. <!--应用的日志模板-->
  26. <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
  27. <file>${LOG_PATH}/application_logs.log</file>
  28. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  29. <fileNamePattern>${LOG_PATH}/app/${APP_NAME}_app.%d{yyyy-MM-dd}.%i.log </fileNamePattern>
  30. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  31. <maxFileSize>${maxFileSize}</maxFileSize>
  32. <!--日志文件保留天数-->
  33. <maxHistory>${maxHistory}</maxHistory>
  34. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  35. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  36. </rollingPolicy>
  37. <encoder>
  38. <pattern>${LOG_PATTERN}</pattern>
  39. <charset>UTF-8</charset>
  40. </encoder>
  41. </appender>
  42. <!-- 控制台输出格式 -->
  43. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  44. <encoder>
  45. <pattern>"[ %-5level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] %logger{16} [%line]- %msg%n"</pattern>
  46. <charset>utf8</charset>
  47. </encoder>
  48. </appender>
  49. <!-- 通用错误日志 -->
  50. <appender name="COMMON_ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
  51. <File>${LOG_PATH}/common_error.log</File>
  52. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  53. <level>ERROR</level>
  54. <onMatch>ACCEPT</onMatch>
  55. <onMismatch>DENY</onMismatch>
  56. </filter>
  57. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  58. <FileNamePattern>${LOG_PATH}/saved_error/${APP_NAME}_common_error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
  59. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  60. <maxFileSize>${maxFileSize}</maxFileSize>
  61. <!--日志文件保留天数-->
  62. <maxHistory>${maxHistory}</maxHistory>
  63. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  64. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  65. </rollingPolicy>
  66. <encoder>
  67. <pattern>${LOG_PATTERN}</pattern>
  68. <charset>UTF-8</charset>
  69. </encoder>
  70. </appender>
  71. <!-- 异常日志 -->
  72. <appender name="COMMON_EXCEPTION_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
  73. <File>${LOG_PATH}/common_exception.log</File>
  74. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  75. <FileNamePattern>${LOG_PATH}/common_exception_saved/${APP_NAME}_common_exception.%d{yyyy-MM-dd}.log</FileNamePattern>
  76. <maxHistory>5</maxHistory>
  77. </rollingPolicy>
  78. <encoder>
  79. <pattern>${LOG_PATTERN}</pattern>
  80. <charset>UTF-8</charset>
  81. </encoder>
  82. </appender>
  83. <!--业务相关日志-->
  84. <appender name="COMMON_BIZ_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
  85. <file>${LOG_PATH}/common-biz.log</file>
  86. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  87. <fileNamePattern>${LOG_PATH}/common_biz_saved/${APP_NAME}_biz.%d{yyyy-MM-dd}.%i.log </fileNamePattern>
  88. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  89. <maxFileSize>${maxFileSize}</maxFileSize>
  90. <!--日志文件保留天数-->
  91. <maxHistory>${maxHistory}</maxHistory>
  92. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  93. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  94. </rollingPolicy>
  95. <encoder>
  96. <pattern>${LOG_PATTERN}</pattern>
  97. <charset>UTF-8</charset>
  98. </encoder>
  99. </appender>
  100. <!-- EMQ相关的日志-->
  101. <appender name="MQTT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
  102. <File>${logPath}/mqtt_log.log</File>
  103. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  104. <fileNamePattern>${logPath}/mq/${APP_NAME}_mqtt_%d{yyyy-MM-dd}.%i.log </fileNamePattern>
  105. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  106. <maxFileSize>${maxFileSize}</maxFileSize>
  107. <!--日志文件保留天数-->
  108. <maxHistory>${maxHistory}</maxHistory>
  109. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  110. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  111. </rollingPolicy>
  112. <encoder>
  113. <pattern>${LOG_PATTERN}</pattern>
  114. <charset>UTF-8</charset>
  115. </encoder>
  116. </appender>
  117. <!-- TCP 协议相关-->
  118. <appender name="TCP_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
  119. <File>${LOG_PATH}/tcp_biz.log</File>
  120. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  121. <FileNamePattern>${LOG_PATH}/tcp_saved/${APP_NAME}_tcp_biz.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
  122. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  123. <maxFileSize>${maxFileSize}</maxFileSize>
  124. <!--日志文件保留天数-->
  125. <maxHistory>${maxHistory}</maxHistory>
  126. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  127. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  128. </rollingPolicy>
  129. <encoder>
  130. <pattern>${LOG_PATTERN}</pattern>
  131. <charset>UTF-8</charset>
  132. </encoder>
  133. </appender>
  134. <!-- GRPC生产者 -->
  135. <appender name="GRPC_PROVIDER_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
  136. <File>${logPath}/grpc/provider.log</File>
  137. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  138. <fileNamePattern>${logPath}/grpc/provider/${APP_NAME}_grpc_provider.%d{yyyy-MM-dd}.%i.log </fileNamePattern>
  139. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  140. <maxFileSize>${maxFileSize}</maxFileSize>
  141. <!--日志文件保留天数-->
  142. <maxHistory>${maxHistory}</maxHistory>
  143. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  144. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  145. </rollingPolicy>
  146. <encoder>
  147. <pattern>${logPattern}</pattern>
  148. <charset>UTF-8</charset>
  149. </encoder>
  150. </appender>
  151. <!-- GRPC消费者 -->
  152. <appender name="GRPC_CONSUMER_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
  153. <File>${logPath}/grpc/consumer.log</File>
  154. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  155. <!-- yyyy-MM-dd 时间策略则为一天一个文件 -->
  156. <fileNamePattern>${logPath}/grpc/consumer/${APP_NAME}_grpc_consumer.%d{yyyy-MM-dd}.%i.log </fileNamePattern>
  157. <!-- 单个日志文件最大量,总日志量不能超过totalSizeCap-->
  158. <maxFileSize>${maxFileSize}</maxFileSize>
  159. <!--日志文件保留天数-->
  160. <maxHistory>${maxHistory}</maxHistory>
  161. <!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
  162. <totalSizeCap>${totalSizeCap}</totalSizeCap>
  163. </rollingPolicy>
  164. <encoder>
  165. <pattern>${logPattern}</pattern>
  166. <charset>UTF-8</charset>
  167. </encoder>
  168. </appender>
  169. <!-- 此logger约束,将EXCEPTION的日志输出到COMMON-EXCEPTION-APPENDER,错误日志输出到COMMON-ERROR-APPENDER -->
  170. <logger name="EXCEPTION" level="${logLevel}" additivity="${additivity}">
  171. <appender-ref ref="COMMON_EXCEPTION_APPENDER"/>
  172. <appender-ref ref="COMMON_ERROR_APPENDER"/>
  173. </logger>
  174. <logger name="com.qif.patrolstation.stationapp.mqtt.handle" level="${logLevel}" additivity="${additivity}">
  175. <appender-ref ref="MQTT_APPENDER"/>
  176. </logger>
  177. <logger name="com.qif.patrolstation.stationapp.consumer" level="${logLevel}" additivity="${additivity}">
  178. <appender-ref ref="GRPC_CONSUMER_APPENDER"/>
  179. </logger>
  180. <logger name="com.qif.patrolstation.stationapp.provider" level="${logLevel}" additivity="${additivity}">
  181. <appender-ref ref="GRPC_PROVIDER_APPENDER"/>
  182. </logger>
  183. <logger name="com.mhz.base.quartz " level="info" additivity="true">
  184. <appender-ref ref="COMMON_BIZ_APPENDER"/>
  185. </logger>
  186. <root level="info">
  187. <appender-ref ref="CONSOLE"/>
  188. <appender-ref ref="COMMON_BIZ_APPENDER"/>
  189. <appender-ref ref="COMMON_EXCEPTION_APPENDER"/>
  190. <appender-ref ref="COMMON_ERROR_APPENDER"/>
  191. </root>
  192. </configuration>

参考文档:

  1. https://zhuanlan.zhihu.com/p/339741978