SprngBoot 日志框架

SpringBoot日志

日志框架分类和选择

在开发中, 总会将关键数据用System.out.println();打印在控制台上,来进行检查判断,
日志框架就是用来打印这个得,用来在控制台上或者新建个文档来储存显示 系统运行时信息
日志框架分为抽象层 和实现层,
在市场上有很多日志框架
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....
日志门面 (日志的抽象层) 日志实现
JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-logging Log4j JUL(java.util.logging) Log4j2 Logback
			SpringBoot:底层是Spring框架,Spring框架默认是用JCL;‘​
				==SpringBoot选用 SLF4j和logback;==

SLF4j 的使用

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,
而是调用日志抽象层里面的方法;
给系统里面导入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以后,配置文件还是做成日志实现框架自己本身的         配置文件;
  下图为 要引入日志框架需要导入的jar包图
  例如: 导入 抽象层框架 slf4j  以及 实现层框架 logback 框架
  需要导入  slf4j-api.jar  
  		logback-classic.jar
  		logback-core.jar     因为这两个框架是一个人写的所有中间不需要连接包
  而导入 slf4j  和 log4j    除了基础jar 包 外,还要导入一个 slf4j-log412.jar 的连接包
  虽然这两个框架也是一个人写的 但 log4j 写出来的更早 没有考虑到后来的抽象层框架,所有需要连接

在这里插入图片描述

遗留问题

不同的框架使用的日志文件是不一定相同的,几个框架联合使用时我们需要统一框架,
所有我们再框架统一的时候需要导入其他框架,联合到我们需要使用的框架上,来使用;
如下图,SpringBoot中我们使用的是 slf4j  ,所有我们在联合其他日志框架的时候 ,我们需要将
其他日志框架删除看,导入如: log4j-over-slf4j .jar 这类框架,来讲这些框架的功能转移到slf4j上

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

SpringBoot日志关系

SpringBoot使用它来做日志功能;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
在IDEA中 在 pom.xml文件中  右键--> Diagrams -->show Dependencies  图表显示mavn 继承关系
总结:​	
	1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录​	
	2)、SpringBoot也把其他的日志都替换成了slf4j;​	
	3)、中间替换包?(打开mavn下载的包 找到那些中间替换包,你会发现中间替换包中的java文件与原日志框架相同,
	但其中的代码块换成了SLF4j 的)
@SuppressWarnings("rawtypes") public abstract class LogFactory {    
static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = 	"http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";  
static LogFactory logFactory = new SLF4JLogFactory();

在这里插入图片描述

在这里插入图片描述

4)、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉?​		
	如: Spring框架用的是commons-logging;

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>	
</dependency>

日志使用

在SpringBoot 默认配置好的日志框架
	//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
    //System.out.println();

    //日志的级别;
    //由低到高   trace<debug<info<warn<error
    //可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
    logger.trace("这是trace日志...");
    logger.debug("这是debug日志...");
    //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
    logger.info("这是info日志...");
    logger.warn("这是warn日志...");
    logger.error("这是error日志...");


}
	
	   日志输出格式:
  %d表示日期时间,
  %thread表示线程名,
  %-5level:级别从左显示5个字符宽度
  %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
  %msg:日志消息,
  %n是换行符
    -->
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

SpringBoot修改日志的默认配置

在application.properties 中

#logging.path=
// 不指定路径在当前项目下生成springboot.log日志
//可以指定完整的路径;
#logging.file=G:/springboot.log

// 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.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
发布了28 篇原创文章 · 获赞 1 · 访问量 591

猜你喜欢

转载自blog.csdn.net/qq_41911729/article/details/102845274