springboo日志框架之SLF4j和logback

springboo日志框架之SLF4j和logback

1,如何系统使用slf4j

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层的方法;给系统导入slf4j的jar包和logback的实现jar,slf4j调用方法志门面 logback是日志实现

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的基础上可以调用其他日志框架;每一个日志的实现框架都有自己的配置文件,使用slf4j框架之后,配置文件,还是做成,日志实现框架的配置文件。

例如:slf4j是日

2,不同日志框架的统一

统一日志记录,即使不同的日志框架也能进行统一。

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

  1. 首先将系统中的其他日志都排除掉
  2. 使用中间包替换原有的日志框架
  3. 我们导入slf4j的其他实现

3,springboot的日志关系。

底层依赖关系

总结:

1),springboot底层也是使用slf4j+logback的方式进行日志记录

2),springboot也把其他的日志都替换成了slf4j;

3),中间替换包

4),如果我们要引入其他的日志框架,一定要把这个框架的默认日志依赖移除掉,如果不移除掉的话,两个相同的jar包就会产生冲突。

springboot能够自动适配所有的日志,而且底层使用lslf4j+logback的方式来记录日志,引入其他框架的时候,只需要把这个框架所依赖的日志框架排除掉。

4,日志使用

1,默认配置

springboot默认帮我们配置好了日志。

//日志的级别

//由低到高 trac<debug<info<warn<error

//当我们项目上线的时候,我们可以调整日志的级别来进行日志输出,

//日志只会再这个级别和更高的级别生效。

//springboot默认的使用的级别时 info级别

package com.zzuli.log.logging;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
class LoggingApplicationTests {

    //记录日志的 记录器  参数 为getClass(),代表本类 
    Logger logger =LoggerFactory.getLogger(getClass());

    @Test
    void contextLoads() {

        //日志的级别
        //由低到高   trac<debug<info<warn<error
        //当我们项目上线的时候,我们可以调整日志的级别来进行日志输出,
        //日志只会再这个级别和更高的级别生效。
        logger.trace("这是trac日志...");
        logger.debug("这是debug日志...");
        logger.info("这是info日志...");
        logger.warn("这是warn日志...");
        logger.error("这是error日志...");


    }

}

运行测试结果

 

调整日志级别,指定范围(在application.properties配置文件中)

logging.level.com.zzuli.log=trace

指定日志文件输出的位置

logging.file.name 现在版本更新了,代表loggiing.file

使用logging.file.path

logging.level.com.zzuli.log=trace


#第一种方式
#指定日志输入位置
#不指定路径
#logging.file.name=springboot.log
#指定路径在硬盘中生成一个日志文件
#logging.file.name=D:/springboot.log


#第二种方式
#logging.file.path
#在当前磁盘的根目录下,创建一个spring文件和里面的文件夹里面的log文件夹,使用spring.log作为默认文件。
logging.file.path=/spring/log

#在控制台输出的日志的格式
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

生成的文件路径

指定在控制台上输出信息的格式

2,指定配置

在类路径下放上每个日志框架自己的配置文件即可:然后springboot就不会使用默认配置的了

配置规则

文件放在了最后自取 logback.xml

logback.xml: 直接可以被日志框架识别了

logback-spring.xml:日志框架不直接加载到日志的配置项,由springboot解析管理,如果文件命不使用

logback-spring.xml,直接使用springProfile就会报错

logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置文件每隔1分钟,就检查更新 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
   <!-- 定义参数常量,便于后面直接用${name}来获取value值 -->
   <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %logger{50} - %msg%n"/>
   <!--<property name="log.filePath" value="${catalina.base}/logs/webapps"/>-->
   <property name="log.filePath" value="D:/logs/webapps"/>
   <property name="log.maxHistory" value="30"/>

   <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
   <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
      <!-- 过去使用layout,现在都推荐使用encoder
             作用一:将日志信息转换(格式化)为字符串
             作用二:然后写入到文件中-->
      <encoder>
         <pattern>${log.pattern}</pattern>
      </encoder>
   </appender>

   <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出到文件 -->
   <!-- 1.打印debug级别日志的设置 -->
   <appender name="debugAppender"
           class="ch.qos.logback.core.rolling.RollingFileAppender">
      <!-- 例如当天,也就是今天是2020-2-10,那么在这天生成的日志文件路径为${log.filePath}/debug.log
             接着到了明天,也就是2019-2-11,这天生成的日志文件路径为${log.filePath}/debug.log,
             但昨天2020-2-10,生成的日志文件路径就变为${log.filePath}/debug/debug-2020-2-10.log.gz(压缩文件) -->

      <!-- 当天生成的日志文件的路径 -->
      <file>${log.filePath}/debug.log</file>
      <!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中-->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <!-- 当天之前的每天生成的日志文件的路径 -->
         <fileNamePattern>${log.filePath}/debug/debug-%d{yyyy-MM-dd}.log.gz
         </fileNamePattern>
         <!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除-->
         <maxHistory>${log.maxHistory}</maxHistory>
      </rollingPolicy>
      <!-- 过去使用layout,现在都推荐使用encoder
             作用一:将日志信息转换(格式化)为字符串
             作用二:然后写入到文件中-->
      <encoder>
         <pattern>${log.pattern}</pattern>
      </encoder>
      <!-- 过滤掉非debug级别的信息 -->
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>debug</level>
         <onMatch>ACCEPT</onMatch>
         <!-- 作用是拒绝写入所有与<level>不匹配的日志信息,
            也就是非debug级别的日志信息都不会被写入到日志文件中 -->
         <onMismatch>DENY</onMismatch>
      </filter>
   </appender>

   <!-- 2.打印info级别日志的设置 -->
   <appender name="infoAppender"
           class="ch.qos.logback.core.rolling.RollingFileAppender">

      <!-- 当天生成的日志文件的路径 -->
      <file>${log.filePath}/info.log</file>
      <!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中-->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <!-- 当天之前的每天生成的日志文件的路径 -->
         <fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd}.log.gz
         </fileNamePattern>
         <!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除-->
         <maxHistory>${log.maxHistory}</maxHistory>
      </rollingPolicy>
      <!-- 过去使用layout,现在都推荐使用encoder
             作用一:将日志信息转换(格式化)为字符串
             作用二:然后写入到文件中-->
      <encoder>
         <pattern>${log.pattern}</pattern>
      </encoder>
      <!-- 过滤掉非info级别的信息 -->
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>info</level>
         <onMatch>ACCEPT</onMatch>
         <!-- 作用是拒绝写入所有与<level>不匹配的日志信息,
            也就是非info级别的日志信息都不会被写入到日志文件中 -->
         <onMismatch>DENY</onMismatch>
      </filter>
   </appender>

   <!-- 3.打印error级别日志的设置 -->
   <appender name="errorAppender"
           class="ch.qos.logback.core.rolling.RollingFileAppender">

      <!-- 当天生成的日志文件的路径 -->
      <file>${log.filePath}/error.log</file>
      <!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中-->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <!-- 当天之前的每天生成的日志文件的路径 -->
         <fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd}.log.gz
         </fileNamePattern>
         <!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除-->
         <maxHistory>${log.maxHistory}</maxHistory>
      </rollingPolicy>
      <!-- 过去使用layout,现在都推荐使用encoder
             作用一:将日志信息转换(格式化)为字符串
             作用二:然后写入到文件中-->
      <encoder>
         <pattern>${log.pattern}</pattern>
      </encoder>
      <!-- 过滤掉非error级别的信息 -->
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>error</level>
         <onMatch>ACCEPT</onMatch>
         <!-- 作用是拒绝写入所有与<level>不匹配的日志信息,
            也就是非error级别的日志信息都不会被写入到日志文件中 -->
         <onMismatch>DENY</onMismatch>
      </filter>
   </appender>

   <!-- 监听com.paopaoedu.springboot包下所有类产生的日志信息
        不设置additivity属性,那么默认additivity = true,表示会继承父级(在这里它的父级只有root一个),
        也就是会将日志信息也输出在控制台,但级别会覆盖父级的级别,也就是在控制台会输出debug级别及以上的日志信息 -->
   <logger name="com.paopaoedu.springboot" level="debug">
      <!-- 表示按照debugAppender的设置去打印日志 -->
      <appender-ref ref="debugAppender"/>
      <!-- 表示按照infoAppender的设置去打印日志 -->
      <appender-ref ref="infoAppender"/>
      <!-- 表示按照errorAppender的设置去打印日志 -->
      <appender-ref ref="errorAppender"/>
   </logger>

   <!-- 也是一种<logger>,是所有<logger>的父级 -->
   <!-- 不设置additivity属性,或者设置additivity = true的<logger>,会继承root的子标签<appender-ref ref="console" />的设置,
        将它自己设置的level属性级别及以上的日志打印到控制台 -->
   <root level="info">
      <!-- 表示按照console的设置去输出日志到控制台 -->
      <appender-ref ref="console"/>
   </root>
</configuration>

5,切换日志框架

例如:logback 日志框架切换成logback

首先打开pom.xml 右键打开生成树。

只需要导入一个依赖就可以了,他里面包含了 slf4j 和 log4j 两个依赖

<!-- 导入偷天换日的包, 要使用的日志依赖也不用加版本号,-->

<dependency>

          <groupId>org.slf4j</groupId>

          <artifactId>slf4j-log4j12</artifactId>

</dependency>

6,springboot中显示sql日志

logging.level.com.包名=DEBUG

查看控制台结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【2021年,将Spring全家桶的课程进行Review,确保不再有课程的顺序错乱,从而导致学员看不懂。进入2022年,将Spring的课程进行整理,整理为案例精讲的系列课程,并开始加入高阶Spring Security等内容,一步步手把手教你从零开始学会应用Spring,课件将逐步进行上传,敬请期待!】 本课程是Spring全家桶系列课程的第三部分Spring Boot,Spring案例精讲课程以真实场景、项目实战为导向,循序渐进,深入浅出的讲解Java网络编程,助力您在技术工作中更进一步。 本课程聚焦Spring Boot核心知识点:整合Web(如:JSP、Thymeleaf、freemarker等的整合)的开发、全局异常处理、配置文件的配置访问、多环境的配置文件设置、日志Logbackslf4j的使用、国际化设置及使用, 并在最后以一个贯穿前后台的Spring Boot整合Mybatis的案例为终奖,使大家快速掌握Spring的核心知识,快速上手,为面试、工作都做好充足的准备。 由于本课程聚焦于案例,即直接上手操作,对于Spring的原理等不会做过多介绍,希望了解原理等内容的需要通过其他视频或者书籍去了解,建议按照该案例课程一步步做下来,之后再去进一步回顾原理,这样能够促进大家对原理有更好的理解。 【通过Spring全家桶,我们保证你能收获到以下几点】 1、掌握Spring全家桶主要部分的开发、实现2、可以使用Spring MVC、Spring Boot、Spring Cloud及Spring Data进行大部分的Spring开发3、初步了解使用微服务、了解使用Spring进行微服务的设计实现4、奠定扎实的Spring技术,具备了一定的独立开发的能力  【实力讲师】 毕业于清华大学软件学院软件工程专业,曾在Accenture、IBM等知名外企任管理及架构职位,近15年的JavaEE经验,近8年的Spring经验,一直致力于架构、设计、开发及管理工作,在电商、零售、制造业等有丰富的项目实施经验  【本课程适用人群】如果你是一定不要错过!  适合于有JavaEE基础的,如:JSP、JSTL、Java基础等的学习者没有基础的学习者跟着课程可以学习,但是需要补充相关基础知识后,才能很好的参与到相关的工作中。 【Spring全家桶课程共包含如下几门】 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值