zoukankan      html  css  js  c++  java
  • 6、springboot:日志的介绍、使用、切换

    一、主流的日志框架介绍

     

    二、springboot中SLF4J的使用

    如何在系统中使用SLF4j https://www.slf4j.org

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

     如下图:

    每一个日志的实现框架都有自己的配置文件。

    使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件

    三、springboot如何使其它日志框架转为slf4j进行输出

    springboot使用(slf4j+logback)、 Spring使用(commons-logging)、Hibernate使用(jboss-logging)、MyBatis、xxxx
    springboot进行统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出

    如何让系统中所有的日志都统一到slf4j;
      1、将系统中其他日志框架先排除出去;
      2、用中间包来替换原有的日志框架;
      3、导入slf4j其他的实现

     四、springboot日志关系

     依赖:

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
    </dependency>

     SpringBoot使用它来做日志功能:

    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>

     SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,

    引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可

    五、springboot中日志的相关配置

      1、springboot中的默认日志相关配置

      如下示例是 springboot 中日志框架使用的一个单元测试,通过这个测试查看默认的日志配置
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbootLogTest {
      //记录器 Logger logger
    = LoggerFactory.getLogger(getClass()); @Test public void logTest() { logger.trace("这是trace日志"); logger.debug("这是debug日志"); logger.info("这是info日志"); //springboot 默认设置的 info级别 logger.warn("这是warn日志"); logger.error("这是error日志"); } }

    日志的级别由低到高

    trace<debug<info<warn<error

     运行springboot应用的时候查看控制台可以发现;springboot日志输出级别默认是info级别(只输出>=info的级别的的日志信息)

    可以调整输出的日志级别,只输出>=日志级别的日志信息

    另外默认把日志信息是输出到控制台

     

      2.application.xml中配置日志级别

    logging.level.com.mr=debug
    //指定扫描的包(红色备注)以及日志级别

      3.配置日志输出文件(不配置时默认只输出到控制台)

        方式一:

    #没有指定具体路径的时候日志文件就生成在当前项目下
    logging.file.name=springboot.log
    #指定了具体路径的时候日志文件就生成在指定路径下
    #logging.file.name=e:/springboot.log

     

        方式二:

    #在当前项目的磁盘(我的项目现在在D盘)的根路径创建spring文件和和里面的log文件,使用spring.Log作为默认文件
    logging.file.path=/spring/log

     

    当配置了logging.file.name时logging.file.path就会失效

      4.自定义日志信息输出格式

    #在控制台输出的日志格式
    logging.pattern.console = 
    #指定在文件中日志输出的格式 
    logging.pattern.file =
    复制代码
    日志输出格式:
                    %d表示日期时间,
                    %thread表示线程名,
                    %-5level:级别从左显示5个字符宽度
                    %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
                    %msg:日志消息,
                    %n是换行符
        -->
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
    复制代码

    举例:

     

    输出结果:

    配置代码小结

    #设置日志级别
    logging.level.com.atguigu=trace
    
    #配置日志文件:
    #       方式一:
    #没有指定具体路径的时候日志文件就生成在当前项目下
    #logging.file.name=springboot.log
    #指定了具体路径的时候日志文件就生成在指定路径下
    #logging.file.name=e:/springboot.log
    
    #       方式二:
    #在当前项目的磁盘的根目录下创建spring文件夹,再在里面创建log文件夹;最后使用spring.log作为默认日志文件名
    logging.file.path=/spring/log
    
    #当配置了logging.file.name时logging.file.path就会失效
    
    #配置控制台日志输出格式
    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

    六、自定义日志配置文件(不使用springboot的默认日志配置) 

      只要在类路径下放上每个日志框架自己的配置文件;SpringBoot就不使用它的默认配置了
      使用什么日志则配置什么文件以及注意文件名
      各日志的文件配置名如下:

     

      以自定义logback日志的配置为例:(在类路径下放名为logback.xml的文件):

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_HOME" value="/app/log" />
        <!-- 定义日志的文件名 -->
        <property name="appName" value="loog"/>
        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
        <!-- 按照每天生成日志文件 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="STDOUT" />
        </root>
    </configuration>
    复制代码

     

    如果文件名为logback.xml:就会被日志框架直接识别了;
    名字为logback-spring.xml时:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,
                   可以使用SpringBoot的高级Profile功能

     

    <springProfile name="xxx">
        <!--可以指定某段配置只在某个环境下生效--> 
    </springProfile>

      此时修改logback.xml名为logback-spring.xml

     

      <springProfile name="xxx">指定某段配置根据环境不同而配置的内容不同
    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_HOME" value="/app/log" />
        <!-- 定义日志的文件名 -->
        <property name="appName" value="loog"/>
        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <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>
            </encoder>
        </appender>
        <!-- 按照每天生成日志文件 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="STDOUT" />
        </root>
    </configuration>
    复制代码
     

      指定环境: 

    如果使用名字为logback.xml作为日志配置文件,还要使用profile功能,会报错

     推荐使用spring-logbac.xml 是由Spring Boot识别,可以使用新功能

    七、切换日志框架

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

      1、切换为log4j的配置(记得写相关配置文件)

        ①假如现在想用 log4j ,需要排除 springboot 默认依赖的 logback 依赖;

        ②log4j-over-slf4j.jar 是 log4j 转成 slf4j 要用的,而我们现在就是想用 log4j,不想转为slf4j,所以不需要这个转换包,即排除这个依赖,

        ③slf4j-log4j12.jar 是 log4j 要用的中间包,需导入。

    复制代码<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    <exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> <exclusion> <artifactId>log4j-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions>
    </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>
    复制代码

       2、切换为log4j2日志框架(记得写相关配置文件)

    复制代码
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
    </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
    复制代码
  • 相关阅读:
    三角形的最大周长
    Java 虚拟机运行时数据区详解
    四数相加 II
    Java 注解详解
    四因数
    【论文笔记+复现踩坑】End-to-end Recovery of Human Shape and Pose(CVPR 2018)
    假如 Web 当初不支持动态化
    保姆级干货分享
    C# ±180的值转成0-360
    C# 校验算法小结
  • 原文地址:https://www.cnblogs.com/lyh233/p/12493925.html
Copyright © 2011-2022 走看看