美文网首页
SpringBoot日志学习

SpringBoot日志学习

作者: 问瑾遗 | 来源:发表于2019-01-08 11:48 被阅读0次

    日志框架

    市面上的日志框架:

    日志门面 日志实现
    JCL,SLF4j,jboss-logging Log4j,JUL,log4j2,Logback

    日志门面:即日志框架抽象层,在开发中,一般直接调用日志抽象层里的方法,而不是直接调用实现层
    日志实现:即日志框架实现层

    SpringBoot推荐选用SLF4j和logback

    SLF4j使用概述

    参考网址:https://www.slf4j.org

    HelloWorld示例:

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

    底层采用不同日志实现框架的使用图示:

    image.png

    由上图可知,不管底层采用何种日志框架实现,我们只需学会使用SLF4j API即可,如果底层采用的是log4j或JUL,我们还要加上适配层。

    桥接旧的API

    前面说了SpringBoot推荐选用SLF4j和logback,可是我们在SpringBoot中如果用到了其它组件,譬如 Spring(采用日志:commons-logging),Hibernate(jboss-logging),MyBatis、xxxx等,它们原来所采用的日志框架各不相同,现在在SpringBoot中要统一使用SLF4j框架了。这些组件又该如何在原日志框架不变的情况下使用SLF4j呢?这里就需要用到桥接了,譬如组件A原先调用log4j.jar,现在我们用log4j-over-slf4j来代替log4j.jar,其中log4j.jar中的类,方法等都和log4j.jar中的同名,同样的返回值,同样的定义,但是具体实现却变成了调用SLF4J API,如此便完成了桥接。参考如下图:


    image.png

    当然,如果你用的组件足够新,是不需要这些的。

    SpringBoot日志框架依赖关系

    新建SpringBoot项目log_demo,打开pom.xml文件,在pom.xml页面右键,选择Diagrams -> Show Dependencies

    可以看到日志框架依赖关系如下图示:


    image.png

    日志使用

    在test中编写测试代码:

    public class LogDemoApplicationTests {
    
        Logger logger = LoggerFactory.getLogger(getClass());
    
        @Test
        public void contextLoads() {
            //日志的级别;
            //由低到高 trace<debug<info<warn<error
            //可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
            logger.trace("这是trace日志...");
            logger.debug("这是debug日志...");
            //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
            logger.info("这是info日志...");
            logger.warn("这是warn日志...");
            logger.error("这是error日志...");
    
        }
    
    }
    

    在application.properties中可以进行相关配置:

    #配置输出级别
    logging.level.com.example=trace
    #logging.path=
    # 不指定路径在当前项目下生成springboot.log日志
    # 也可以指定完整的路径;示例如下:
    # 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
    logging.path=/spring/log
    #logging.file指定日志输出到文件
    #logging.file=G:/springboot.log
    
    #%d表示日期时间,
    #%thread表示线程名,
    #%‐5level:级别从左显示5个字符宽度
    #%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
    #%msg:日志消息,
    #%n是换行符
    # 在控制台输出的日志的格式
    logging.pattern.console=%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} ‐ %msg%n
    # 指定文件中日志输出的格式
    logging.pattern.file=%d{yyyy‐MM‐dd} === [%thread] === %‐5level === %logger{50} ==== %msg%n
    
    配置 作用 Example Description
    默认 输出到控制台
    logging.file 指定文件名 my.log 输出日志到my.log文件
    logging.path 指定目录 /var/log 输出到指定目录的spring.log文件中

    打开External Libraries -》Maven:org.springframework.boot:spring-boot:2.1.1.RELEASE 如下图示:


    image.png

    在这里可以看到一些SpringBoot的默认配置等。

    使用自定义配置

    可以在src->main->resources类路径下放上对应日志框架的自定义配置文件,这样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

    其中:
    logback.xml:直接就被日志框架识别了;
    logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以在自定义配置文件中使用SpringBoot的高级Profile功能:

    <springProfile name="staging">
        <!‐‐ configuration to be enabled when the "staging" profile is active ‐‐>
        可以指定某段配置只在某个环境下生效
    </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">
            <!-- 在dev环境下 -->
            <springProfile name="dev">
                <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ‐‐‐‐> [%thread] ‐‐‐> %‐5level
                %logger{50} ‐ %msg%n</pattern>
            </springProfile>
             <!-- 在非dev环境下 -->
            <springProfile name="!dev">
                <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ==== [%thread] ==== %‐5level
                %logger{50} ‐ %msg%n</pattern>
            </springProfile>
        </layout>
    </appender>
    

    相关文章

      网友评论

          本文标题:SpringBoot日志学习

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