第二章日志管理

1.日志框架

1.1.日志框架的发展起源

         刚开始由于开发人员在编程的时候,需要查看自己编写程序的最终运行结果,以及编程过程中程序的运行状况等。经常借助控制台输出语句,输出自己想要的内容格式!最终形成报文,随着人们开发程序越来越大,越来越多!开始发现这些输出内容非常必要,于是乎人们开始编写一些日志框架!以方便程序员及时观看程序各种运行情况,以及程序(或者开发的过程)中出现bug能够及时定位,发现问题并且解决问题!
        于是日志框架的市场百花齐放,市面上出现了很多的日志框架:JUL、JCL、jboss-logging、log4j、log4、j2、slf4j……

1.2.日志关系

        讲到日志关系必须提一下JDBC,来帮助我们缕清关系!
        Java当时开发连接数据库时,面对众多的数据库厂商的数据库,非常麻烦,于是sun公司提出了一种解决方案!sun公司预留好连接数据库的接口,由数据库厂商进行实现!对于Java这种解决方案,可以引用到日志上!这里面对众多的日志框架,SpringBoot框架集成主流的一些日志框架抽象类(相当于于接口),我们把抽象类叫做日志门面,方便我们去把其它日志框架转换成SpringBoot日志框架!
        JCL也被称为:Apache Commons Logging,但该日志框架早已经停更(2014);jboss-logging,只被Hibernate框架使用过,目前还没有发现被其他框架使用所以我们不学它;log4j和logback作者是CekiGülcü, 土耳其的一个哥们开发的,江湖上只留其名,未见其人!
        log4j2由apache公司,在log4j基础上做得升级,由于框架在SpringBoot使用频率不高!所以我们选择日志门面和日志实现:

日志门面(抽象类) 日志实现
SLF4J Logback

        在Spring底层使用的是Commons-logging,也就是默认使用的JCL
        在SpringBoot底层使用的是SLF4J和Logback

2.SLF4J的使用

2.1.如何在SpringBoot中使用SLF4J

        SLF4J官方网址:SLF4J
        日志实现最主要的作用是:帮助我们输出一些默认或者我们自己定义的日志(报文)!所以我们在开发的时候,使用的是日志门面(抽象类)中的方法;
接下来我们可以看一下:
        创建项目,选中Web依赖
第二章日志管理_第1张图片
如何调取方法: 

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

2.2.如何解决日志框架导入问题

        那么SLF4J日志框架怎么解决第三方日志框架导入的问题呢?
        场景:例如现在有个项目要求必须使用Log4j日志?第二章日志管理_第2张图片

 2.3.如何解决第三方框架依赖问题

        那么SLF4J日志框架怎么解决技术框架依赖第三方日志的问题呢?
        场景:现在使用Spring框架,日志管理使用SLF4J-Logback日志框架,但Spring框架没有Commons-logging日志就会报错,但是又不用Commons-logging日志框架,如何解决?
第二章日志管理_第3张图片

         如何让项目中所有日志都统一为SLF4J:首先将项目中的日志框架依赖抽取出来;使用扩展包来替换原有的日志框架;就可以导入SLF4J的实现(Logback、SLF4J-Simple等)。

3.SpringBoot中日志依赖关系

        在spring-boot-starter-web中存在依赖:

  
     org.springframework.boot
     spring-boot-starter
     2.4.4
  

        在SpringBoot中使用它来管理日志:


    org.springframework.boot
    spring-boot-starter-logging
    2.4.4
    compile

        SpringBoot日志依赖关系图:点击depenency找到相关包
第二章日志管理_第4张图片
第二章日志管理_第5张图片

          如何去掉项目中的依赖:找到要去除的相关依赖
第二章日志管理_第6张图片

        
			org.springframework.boot
			spring-boot-starter-web
			
				
					org.slf4j
					jul-to-slf4j
				
			
		

        Springboot能适配自动适配所有的日志,在底层使用slf4j+logback的方式记录日志,引入其它第三方技术时,只需要把技术中所依赖的日志框架exclusion掉就行。

4.日志的使用

4.1.默认配置

@SpringBootTest
class SpringBootDemo04ApplicationTests {

	//日志记录器:日志工厂类
	Logger logger = LoggerFactory.getLogger(getClass());
	@Test
	void contextLoads() {
		
		/**
		 * 日志级别: 以下代码的级别是:由低到高的 对于SpringBoot的
		 * root权限日志级别为:info,所以代码显示的只有info、warn、error
		 * 
		 * 定义好级别: 只是在该级别和级别高的才会输出
		 */
		// 正常
		logger.trace("这是Tracy日志……");
		logger.debug("这是debug日志……");
		// 输出
		logger.info("这是info日志……");
		// 过期
		logger.warn("这是warn日志……");
		logger.error("这是error日志……");
	}

}

        SpringBoot的root权限日志级别为:info
第二章日志管理_第7张图片

 日志级别分为六类:
第二章日志管理_第8张图片

日志输出格式:

%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修改的默认配置: 这里注意旧版本和新版本之间的区别
        如果不清楚可以到:SpringBoot文档帮助中心在这里找到对应版本号,去查找自己对应的属性!

# 指定输出环境
spring.profiles.active=dev
#设置日志默认输出级别
logging.level.com.school.demo=trace
#设置日志生成文件路径
#logging.file.name=D:/SpringBoot.log
# 在eclipse安装的盘的根目录生成var文件夹,var下方生成相关日志文件
logging.file.path=/var/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
# 配置日志颜色输出,当前输出环境必须支持!
#spring.output.ansi.enabled=ALWAYS
logging.file.name logging.file.path Example Description
(none) (none) Console only logging.
Specific file (none) my.log Writes to the specified log file. Names can be an exact location or relative to the current directory.
(none) Specific directory /var/log Writes spring.log to the specified directory. Names can be an exact location or relative to the current directory.

4.2.指定配置

        给classspath路径下,加入日志框架自己的配置文件即可;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的日志定制功能;
        SpringBoot可以定制日志:我们可以定制不同环境,输出不同的日志功能,name用于指定环境,如dev、test等


    

        如:


  
    
      
        %d{yyyy-MM-dd HH:mm:ss.SSS} ---dev--- [%thread] %-5level %logger{50} - %msg%n
      
    
    
      
        %d{yyyy-MM-dd HH:mm:ss.SSS} ---!dev--- [%thread] %-5level %logger{50} - %msg%n
      
    
  

如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误
no applicable action for [springProfile]

你可能感兴趣的:(springboot,java,spring,boot)