美文网首页
三、Spring Boot与日志

三、Spring Boot与日志

作者: 紫雨杰 | 来源:发表于2018-05-04 18:33 被阅读0次

一、日志框架分类和选择

   1、市场上存在非常多的日志框架。JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback、SLF4j、
      jboss-logging等。

   2、SpringBoot:底层是Spring框架,Spring框架默认是用JCL(Apache Commons Logging);

★  3、spring-boot-starter-logging 采用了slf4j+logback的形式,Spring Boot也能自动适配(jul、log4j2、logback) 并简化配置;

二、SLF4j的使用

 1、如何在系统中使用SLF4j (官方地址:https://www.slf4j.org)

    ● 开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;

    ● 给系统里面导入slf4j的jar和 logback的实现jar

    ● 使用如下方式

               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");
                 }
               }

    ● 每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件;

如图所示:
如何使用SLF4j.png
2、遗留的问题

     ● 比如一个系统用的日志框架是slf4j+logback,然后这个系统有依赖于其它框架,比如Spring,Hebernate,Mybatis等,
       而Spring的底层使用的是Apache Commons Logging日志框架,Hebernate的底层使用的是 jboss-logging日志框架,
       怎样统一日志记录,即使是依赖别的框架,也能和该系统一样统一使用slf4j进行输出?

★ 如何让系统中所有的日志都统一到slf4j ?

    1)、将系统中其它日志框架先排除出去;
    2)、用中间包来替换原有的日志框架;
    3)、然后导入slf4j其它的实现

如图所示:
legacy.png

三、SpringBoot日志关系

1、spring-boot-starter-web 依赖 spring‐boot‐starter,而 spring‐boot‐starter 中包含 spring‐boot‐starter‐logging,
   SpringBoot使用它来做日志功能;

2、总结:
    1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录
    2)、SpringBoot使用中间替换包把其它的日志都替换成了slf4j;
    3)、如果要引入其它框架,一定要把这个框架的默认日志依赖移除掉

★ SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,
   只需要把这个框架依赖的日志框架排除掉即可;

四、SpringBoot日志使用

  ★ 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台,不会写到日志文件。

 1、日志级别由高到低:OFFF,  ATAL,  ERROR,  WARN,  INFO,  DEBUG ,  TRACE

 2、日志输出格式:

          %d表示日期时间,
          %thread表示线程名,
          %‐5level:级别从左显示5个字符宽度
          %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
          %msg:日志消息,
          %n是换行符

     例如:
          %d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n

 3、SpringBoot修改日志的默认配置

      ● 如果需要将日志输出到日志文件中,可以在application.properties中设置logging.file或logging.path属性。

      1)、可以指定完整的路径,则在该路径下生成日志文件
              logging.file=G:/springboot.log

      2)、不指定路径,则在当前项目下生成springboot.log日志
              logging.file=springboot.log

      3)、在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件名
              logging.path=/spring/log

  【注意】:
         logging.file 与  logging.path 二者不能同时使用,如若同时使用,则只有logging.file生效



  ★ 指定日志文件与日志的profile功能

     1、给类路径下放上指定日志框架自己的配置文件即可,SpringBoot就不使用它默认配置的了;

                    Logging System                                   Customization

                      Logback             logback-spring.xml , logback-spring.groovy , logback.xml or logback.groovy
                       Log4j2                                  log4j2-spring.xml or log4j2.xml
               JDK (Java Util Logging)                             logging.properties

     2、举例说明:

            ● logback.xml:如果在类路径下直接放的日志文件名为logback.xml,则直接就被日志框架识别了;

            ● logback-spring.xml:如果在类路径下直接放的日志文件名为logback-spring.xml,日志框架就不直接加载日志的配置项,
              由SpringBoot解析日志配置,可以使用SpringBoot 的 Profile功能,可以指定某段配置只在某个环境下生效

            ● 如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误

                  Caused by: java.lang.IllegalStateException: Logback configuration error detected: 
                  ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:39 - no applicable action for [springProfile]


    例如:
          <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
               <!‐‐
                   日志输出格式:
                        %d表示日期时间,
                        %thread表示线程名,
                        %‐5level:级别从左显示5个字符宽度
                        %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
                        %msg:日志消息,
                        %n是换行符
               ‐‐>
               <layout class="ch.qos.logback.classic.PatternLayout">

                   <!‐‐ 指定在开发环境下生效 ‐‐>
                   <springProfile name="dev">
                        <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ‐‐‐> [%thread] ‐‐> %‐5level %logger{50} ‐ %msg%n</pattern>
                   </springProfile>

                   <!‐‐ 指定在非开发环境下生效  ‐‐>
                   <springProfile name="!dev">
                        <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} === [%thread] === %‐5level %logger{50} ‐ %msg%n</pattern>
                   </springProfile>
               </layout>
          </appender>

五、切换日志框架

1、可以按照slf4j的日志适配图,进行相关的切换;

2、使用Logback进行日志记录的启动器是SpringBoot默认的日志起动器,SpringBoot也支持使用log4j2

    ● 排除 spring-boot-starter-logging
    ● 导入 spring-boot-starter-log4j2

相关文章

网友评论

      本文标题:三、Spring Boot与日志

      本文链接:https://www.haomeiwen.com/subject/yhfslftx.html