Spring Boot 学习摘要–关于日志框架
学习教程来自:B站 尚硅谷
1. 关于日志框架
市面上有 N 多个日志工具包,为了能通用,会有专门的抽象类,所以需要用的时候,要先选择一个抽象类的包,然后选择对应的一个实现类的包
抽象类:JCL 、 SLF4J
实现类:Log4J 、 JUL 、 Log4J2 、 Logback
Spring Boot 选择是的 SLF4J 和 Logback
抽象类也就是门面,只是在.java文件中调用的类(包),底层实现还是用的 Logback
1. SLF4J 的使用
在开发的时候,应该调用日志抽象层中的方法,会自动适配到实现层的方法
在系统里导入 slf4j 和 logback 的 jar 包
1 2 3 4 5 6 7 8 9
   | import org.slf4j.Logger; import org.slf4j.LoggerFactory;
  public class HelloWorld {   public static void main(String[] args) {     Logger logger = LoggerFactory.getLogger(HelloWorld.class); // 参数为当前类     logger.info("Hello World");   } }
   | 
 

PS:如果 slf4j 要调用 log4j 的实现方法,因为 slf4j 出现的早,没有做 log4j 的适配,所以需要再导入一个 slf4j-log412.jar,来自动匹配到 log4j 的方法
每一个日志框架都有自己的配置文件。如果要是用slf4j的话,配置文件还是需要用日志实现框架自己本身的配置文件。
2. 如果有多个系统,每个系统用的日志框架都不一致,如何统一修改为 slf4j ?
将系统中不同的日志框架包按照下图来替换

3. slf4j 的使用
- 日志的级别 由低到高
可以调整日志的级别,只打印大于等于该级别的日志 
1 2 3 4 5
   | logger.trace("...") logger.debug("...") logger.info("...") logger.warn("...") logger.error("...")
  | 
 
Springboot 默认输出的是 info 级别的日志,即只输出 info、warn、error 这三个级别的日志。可以在 application.properties 文件里修改
1
   | logging.level.具体的某一个包或类=trace/debug/info/warn/error
   | 
 
- 指定输出日志文件 在 application.properties 文件中配置
 
1 2
   | logging.file= logging.path=
   | 
 
- 如果没有配置这两项,日志只在控制台输出
 
- 只配置 
logging.file:会在当前项目下生成日志文件 
- 只配置 
logging.path:会在磁盘根路径下创建文件夹,并且使用 spring.log 作为默认文件 
1 2 3 4
   | # 在控制台输出的日志的格式 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logging{50} - %msg%n # 指定文件中日志的输出的格式 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} -- [%thread] -- %-5level -- %logging{50} -- %msg%n
   | 
 
- 其他配置 添加新的配置文件
 
如果是使用 Logback 日志框架,添加 logback.xml 来指定配置,但是更推荐使用 logback-spring.xml 文件来指定配置,这时候日志框架不会直接加载配置文件,而是由 SpringBoot 解析日志配置,这样就可以使用 springProfile 功能,通过指定运行环境(dev/prod)来实现切换输出日志形式。
如何切换运行环境:  
1 2
   | # application.properties 文件中添加 spring.profile.active=dev/prod
   | 
 
附:logback.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
   | <?xml version="1.0" encoding="UTF-8"?> <configuration>     <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->     <!-- appender是configuration的子节点,是负责写日志的组件。 -->     <!-- ConsoleAppender:把日志输出到控制台 -->     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">             <level>TRACE</level>         </filter>         <encoder>             <pattern>%d %p (%file:%line\)- %m%n</pattern>             <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->             <charset>UTF-8</charset>         </encoder>     </appender>     <!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->     <!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是sys.log -->     <!--             2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->     <appender name="syslogInfo"               class="ch.qos.logback.core.rolling.RollingFileAppender">         <filter class="ch.qos.logback.classic.filter.LevelFilter">             <level>info</level>             <onMatch>ACCEPT</onMatch>             <onMismatch>DENY</onMismatch>         </filter>         <File>/Users/mxxct/Desktop/log/info/info.log</File>         <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->         <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">             <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->             <!-- 文件名:log/sys.2017-12-05.0.log -->             <fileNamePattern>/Users/mxxct/Desktop/log/info/%d/credit.%d.%i.log</fileNamePattern>             <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->             <maxHistory>30</maxHistory>             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                 <!-- maxFileSize:用于判断日志切割的文件大小,默认值是10MB -->                 <maxFileSize>10MB</maxFileSize>             </timeBasedFileNamingAndTriggeringPolicy>         </rollingPolicy>         <encoder>             <!-- pattern节点,用来设置日志的输入格式 -->             <pattern>                 %d %p (%file:%line\)- %m%n             </pattern>             <!-- 记录日志的编码 -->             <charset>UTF-8</charset> <!-- 此处设置字符集 -->         </encoder>     </appender>     <appender name="syslogError" class="ch.qos.logback.core.rolling.RollingFileAppender">         <filter class="ch.qos.logback.classic.filter.LevelFilter">             <level>error</level>             <onMatch>ACCEPT</onMatch>             <onMismatch>DENY</onMismatch>         </filter>         <File>/Users/mxxct/Desktop/log/error/error.log</File>         <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->         <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">             <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->             <!-- 文件名:log/sys.2017-12-05.0.log -->             <fileNamePattern>/Users/mxxct/Desktop/log/error/%d/error.%d.%i.log</fileNamePattern>             <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->             <maxHistory>30</maxHistory>             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                 <!-- maxFileSize:用于判断日志切割的文件大小,默认值是10MB -->                 <maxFileSize>10MB</maxFileSize>             </timeBasedFileNamingAndTriggeringPolicy>         </rollingPolicy>         <encoder>             <!-- pattern节点,用来设置日志的输入格式 -->             <pattern>                 %d %p (%file:%line\)- %m%n             </pattern>             <!-- 记录日志的编码 -->             <charset>UTF-8</charset> <!-- 此处设置字符集 -->         </encoder>     </appender>     <!-- 控制台输出日志级别 -->     <root level="INFO">         <appender-ref ref="STDOUT"/>     </root>     <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->     <!-- shop.bangke.credit为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->     <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->     <logger name="com.bigdata" level="DEBUG">         <appender-ref ref="syslogInfo"/>         <appender-ref ref="syslogError"/>     </logger> </configuration>
   |