一、Spring Boot日志介绍

  Spring Boot对所有内部日志记录使用了Commons Logging,但是底层日志实现是开放的。为Java Util日志记录、Log4J2和Logback提供了缺省配置。在每种情况下,日志记录器都预先配置为使用控制台输出和可选的文件输出。

  默认情况下,如果使用Spring Boot的“Starters”坐标,则默认使用Logback进行日志记录。还包括适当的Logback路由,以确保使用Java Util日志记录、Commons日志记录、Log4J或SLF4J的依赖库都能正确工作。

  Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

二、相关maven坐标

  1. <!--starter坐标-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6.  
  7. <!--janino-->
  8. <!--若用到了logback的if标签的condition表达式,就需要该坐标-->
  9. <!--否则会抛出该错误:ERROR in ch.qos.logback.core.joran.conditional.IfAction - Could not find Janino library on the class path. Skipping conditional processing.-->
  10. <dependency>
  11. <groupId>org.codehaus.janino</groupId>
  12. <artifactId>janino</artifactId>
  13. <version>2.6.1</version>
  14. </dependency>

三、引入logback.properties属性文件

  1. #日志路径
  2. logback.dir=/Users/zhangboqing/Downloads/logs
  3. #文件名称
  4. logback.all.filename=springboot-base-frame-all
  5. logback.info.filename=springboot-base-frame-info
  6. logback.warn.filename=springboot-base-frame-warn
  7. logback.error.filename=springboot-base-frame-error
  8. #文件的最大数量
  9. logback.maxhistory=10
  10. #文件的最大文件大小
  11. logback.maxfilesize=100MB
  12. #日志级别
  13. logback.level=debug
  14. #日志字符编码
  15. logback.charset=UTF-8
  16. #日志格式
  17. CONSOLE_LOG_PATTERN=%d{yyyy-MM-dd HH:mm:ss.SSS} %boldYellow([%thread]) %highlight(%-5level) %boldGreen(%logger{50}) - %msg%n
  18. FILE_LOG_PATTERN=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
  19. #控制日志是否在控制台打印,默认打印
  20. ifOpenConsol=true

四、引入logback.xml日志配置文件

日志按天和日志文件大小滚动分割,从日期和大小两个维度来滚动打印

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <!--
  4. 说明:
  5. 1、日志级别及文件
  6. 日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中
  7. 例如:error级别记录到xxx-error-xxx.log(该文件为当前记录的日志文件),而xxx-error-xxx.x.log为归档日志,
  8. 日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名
  9. 例如xxx-error-2013-12-21.0.log
  10. 其它级别的日志也是如此。
  11. 2、文件路径
  12. 若本地开发,以绝对路径指定,如:/Users/zhangboqing/Downloads/logs。
  13. 若部署到服务器,则各个服务器约定一个固定的日志路径如/data/home/logs/【项目名】/
  14. 3、Appender
  15. FILE-ALL对应所有级别,文件名以xxx-all-xxx.log形式命名
  16. FILE-ERROR对应error级别,文件名以xxx-error-xxx.log形式命名
  17. FILE-WARN对应warn级别,文件名以xxx-warn-xxx.log形式命名
  18. FILE-INFO对应info级别,文件名以xxx-info-xxx.log形式命名
  19. FILE-DEBUG对应debug级别,文件名以xxx-debug-xxx.log形式命名
  20. STDOUT将日志信息输出到控制上,为方便开发测试使用
  21. -->
  22.  
  23. <!-- 一、根节点<configuration>,包含下面三个属性-->
  24. <!--1.scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true-->
  25. <!--2.scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。-->
  26. <!--3.debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
  27. <configuration
  28. xmlns="http://ch.qos.logback/xml/ns/logback"
  29. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  30. xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd"
  31. scan="true">
  32. <!--注册转换器,颜色转化器-->
  33. <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
  34. <conversionRule conversionWord="wex"
  35. converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
  36.  
  37. <!-- 二、子节点<contextName>:用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。-->
  38. <contextName>springboot-base-frame</contextName>
  39.  
  40. <!-- 三、子节点<property> -->
  41. <!--子节点<property name="" value=""> :用来定义变量值,它有两个属性name和value,通过<property>定义的值会被插入到logger上下文中,可以使“${}”来使用变量。-->
  42. <!--子节点<property resource=""/> :用来引入外部属性文件,可以使“${}”来使用变量。-->
  43. <property resource="logback.properties"/>
  44. <!--日志输出格式-->
  45. <!--控制台-彩色-->
  46. <!--<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}) %boldYellow([%thread]) %highlight(%-5level) %boldGreen(%logger{50}) - %msg%n" />-->
  47. <!--文件-黑白-->
  48. <!--<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />-->
  49.  
  50. <!-- 四、子节点<appender>:负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名 -->
  51. <!--4.1 class为ch.qos.logback.core.ConsoleAppender 把日志输出到控制台-->
  52. <!--4.2 class为ch.qos.logback.core.FileAppender 把日志添加到文件-->
  53. <!--4.3 class为ch.qos.logback.core.rolling.RollingFileAppender 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件-->
  54.  
  55. <!-- 控制台输出 -->
  56. <!--<if condition='property("ifOpenConsol").contains("true")'>-->
  57. <if condition='p("ifOpenConsol").contains("true")'>
  58. <then>
  59. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  60. <encoder>
  61. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  62. <pattern>${CONSOLE_LOG_PATTERN}</pattern>
  63. <charset>${logback.charset}</charset>
  64. </encoder>
  65. <!--字符串 System.out 或者 System.err ,默认 System.out -->
  66. <target>System.out</target>
  67. </appender>
  68. </then>
  69. </if>
  70.  
  71. <!--日志记录器,日期滚动记录-->
  72. <!-- 按照每天生成日志文件 -->
  73. <!-- INFO -->
  74. <appender name="FILE-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  75. <!--日志文件的路径及文件名-->
  76. <!--被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值-->
  77. <file>${logback.dir}/${logback.info.filename}.log</file>
  78. <!-- 如果 true,事件被追加到现存文件尾部。如果 false,清空现存文件.默认为 true -->
  79. <append>true</append>
  80. <!--临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝-->
  81. <!-- 此日志文件只记录INFO级别的 -->
  82. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  83. <level>INFO</level>
  84. </filter>
  85. <!--当发生滚动时,决定 RollingFileAppender 的行为-->
  86. <!--日志记录器的滚动策略,按日期,按大小记录,涉及文件移动和重命名-->
  87. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  88. <!-- 归档的日志文件的路径,例如今天是2018-09-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  89. 而2018-09-21的归档日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
  90. <!--即file和fileNamePattern同时制定,当天日志名由file决定,前一天的文件名将自动改为fileNamePattern的值-->
  91. <!-- 若要加一层时间目录 <fileNamePattern>${logback.dir}/%d{yyyy-MM-dd,aux}/${logback.info.filename}.%i.log.gz</fileNamePattern>-->
  92. <fileNamePattern>${logback.dir}/${logback.info.filename}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  93. <!--控制被保留的归档文件的最大数量,超出数量就删除旧文件-->
  94. <!--日志文件保留天数 -->
  95. <maxHistory>${logback.maxhistory}</maxHistory>|
  96. <!--指定文件的大小-->
  97. <maxFileSize>${logback.maxfilesize}</maxFileSize>
  98. </rollingPolicy>
  99. <!--负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流-->
  100. <!-- 日志文件的格式 -->
  101. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  102. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  103. <pattern>${FILE_LOG_PATTERN}</pattern>
  104. <!--日志字符编码格式-->
  105. <charset>${logback.charset}</charset>
  106. </encoder>
  107. </appender>
  108.  
  109. <!-- ALL -->
  110. <appender name="FILE-ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
  111. <file>${logback.dir}/${logback.all.filename}.log</file>
  112. <append>true</append>
  113. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  114. <fileNamePattern>${logback.dir}/${logback.all.filename}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
  115. <maxHistory>${logback.maxhistory}</maxHistory>
  116. <maxFileSize>${logback.maxfilesize}</maxFileSize>
  117. </rollingPolicy>
  118. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  119. <pattern>${FILE_LOG_PATTERN}</pattern>
  120. <charset>${logback.charset}</charset>
  121. </encoder>
  122. </appender>
  123.  
  124. <!-- ERROR -->
  125. <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
  126. <file>${logback.dir}/${logback.error.filename}.log</file>
  127. <append>true</append>
  128. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  129. <level>ERROR</level>
  130. </filter>
  131. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  132. <fileNamePattern>${logback.dir}/${logback.error.filename}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
  133. <maxHistory>${logback.maxhistory}</maxHistory>
  134. <maxFileSize>${logback.maxfilesize}</maxFileSize>
  135. </rollingPolicy>
  136. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  137. <pattern>${FILE_LOG_PATTERN}</pattern>
  138. <charset>${logback.charset}</charset>
  139. </encoder>
  140. </appender>
  141.  
  142. <!-- 五、子节点<logger>:用来设置某一个包或具体的某一个类的日志打印级别、以及指定<appender>。<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger-->
  143. <!-- 六、子节点<root>:它也是<logger>元素,但是它是根logger,是所有<logger>的上级。只有一个level属性,因为name已经被命名为"root",且已经是最上级了。-->
  144.  
  145. <!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 -->
  146. <!--这里改level-->
  147. <root level="${logback.level}">
  148. <appender-ref ref="STDOUT"/>
  149. <appender-ref ref="FILE-ALL"/>
  150. <appender-ref ref="FILE-INFO"/>
  151. <appender-ref ref="FILE-ERROR"/>
  152. </root>
  153.  
  154. </configuration>

Spring Boot之logback日志最佳实践的更多相关文章

  1. 剑指架构师系列-spring boot的logback日志记录

    Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...

  2. 基于Spring Boot的Logback日志轮转配置

    在生产环境下,日志是最好的问题调试和跟踪方法,因此日志的地位是十分重要的.我们平时经常使用的log4j,slf4j,logback等等,他们的配置上大同小异.这里就结合Spring Boot配置一下L ...

  3. spring boot 使用logback日志系统的详细说明

    springboot按照profile进行打印日志 log4j logback slf4j区别? 首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样 ...

  4. 【spring boot logback】spring boot中logback日志乱码问题

    在初次使用logback的自定义配置文件完整的控制spring boot日志后,发现了一个无法忍受的问题,就是日志乱码. 控制台看到打印日志乱码如下: 而日志文件打开: 记事本打开 sublime打开 ...

  5. Spring Boot 集成 logback日志

    application.properties 配置logback.xml 路径注:如果logback.xml在默认的 src/main/resources 目录下则不需要配置application.p ...

  6. spring boot 配置logback日志之jdbcTemplate打印sql语句配置

    配置jdbcTemplate打印sql 用mybaties打印语句很好配置,后来用了JdbcTemplate就不知道怎么打印了,其实JdbcTemplate执行sql语句的过程会做打印sql语句的操作 ...

  7. spring boot(13)-logback和access日志

    logback logback出自log4j的作者,性能和功能相比log4j作出了一些改进,而配置方法和log4j类似,是spring boot的默认日志组件.在application.propert ...

  8. Spring Boot (16) logback和access日志

    Spring Boot 内部采用的是Commons Logging进行日志记录,但是在底层为Java Util Logging.Log4J2.Logback等日志框架提供了默认配置. logback ...

  9. spring boot整合slf4j-log日志

    原文地址:https://blog.csdn.net/u011271894/article/details/75735915 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

随机推荐

  1. 向eclipse的JavaWeb项目中导入jar包

    一:      在你所需的jar包网站下载对应的jar包.如org.apache.commons.lang.jar. 二:复制粘贴到该JavaWeb的WEB-INF目录下的lib目录下,如: 三:右键 ...

  2. Icons - Material Design各种ICON图标大全

    Icons - Material Design https://material.io/tools/icons/?icon=account_balance&style=baseline

  3. Python, pandas: how to sort dataframe by index// Merge two dataframes by index

    pd.concat([df1, df2], axis=1) df.sort_index(inplace=True) https://stackoverflow.com/questions/404680 ...

  4. C# 递归模型定义。赋值

    https://blog.csdn.net/wumiju/article/details/80429412 public partial class ProductTypeModel:DbEntity ...

  5. P3412 仓鼠找sugar II

    思路 挺神的概率期望.. 好吧是我太弱了,完全没有往那里想 注意期望是具有线性性的,一条路径的期望可以变成每条边的期望求和 概率是某件事发生的可能性,期望是某件事确定发生的代价 首先没有终点的条件并不 ...

  6. Linux(CentOS)上面搭建Nginx环境

    总体上来说,Linux 这个系统其实挺好用的 除了看不见界面,但是用起来确实是比Window好用太多了,不废话了,直接说搭建环境的步骤! 安装Nginx 编译运行时的环境 参考博客:http://ww ...

  7. 案例2:用一条SQL查询出数学语文成绩都大于80分的学生姓名?

    方法1: 查出科目成绩有小于80分的学生姓名,再约束并去重学生不等于查出来的姓名 select distinct A.name from t_score A where A.name not in(s ...

  8. 【C#】神奇的yeild

    直接出栗子: class Program { static void Main(string[] args) { foreach (var item in FilterWithoutYield) { ...

  9. CommandLine exe参数

    [Verb("OptionsEntity")] public class OptionsEntity { [Option('a', HelpText = "Plantfo ...

  10. qt QRegExp使用(搬运工)

    设置正则表达式. 类似下面的 QRegExp 这里的用法就是用来检测QString等字符串错误的,例如文件名里面最好就不出现<>|/\:等,所以可以如下定义QRegExp rx(" ...