springboot核心技术之日志管理(三)

一、常见的日志框架

       常见日志框架:JUL、JCL、Log4j、Log4j2,Logback、SLF4j、Jboss-logging

日志门面(日志的抽象)日志实现

JCL(Jakarta Commons Logging)

SLF4j(Simple Logging Facade for java)

jboss-logging

Log4j

JUL(java.util.logging)

Log4j2

Logback

       企业级开发日志选择:

                日志门面:SLF4j;

                日志实现:Log4j、Logback;

                Log4j2功能非常强大,但是设计比较复杂并且没有日志门面与之相匹配,作为企业级日志会存在不稳定的问题;

               日志选择逻辑:日志门面+日志实现,运行日志时调用的是日志门面的接口,但是配置采用的是日志实现的配置。

      springboot日志选择:spring框架默认采用的是JCL日志门面,所以springboot底层默认排除了spring框架采用的JCL

               日志门面:SLF4j;

               日志实现:Logback;它相对于Log4j来说更加的强大功能更加齐全。

二、日志门面+日志实现依赖包组合选择

       1、经典依赖包组合图

      

     SLF4j:只导入SLF4j的jar包,没有实现日志,日志功能单一

     SLF4j+Logback:导入slf4j-api.jar和Logback相关jar包

     SLF4j+Log4j:导入slf4j-api.jar、slf4j-log412.jar、log4j.jar三个jar包

     SLF4j+JUL:导入slf4j-api.jar、slf4j-jdk14.jar、JUL相关jar包

     SLF4j+slf4j-simple:导入slf4j-api.jar、slf4j-simple.jar

     注意:1)SLF4j+Log4j相对于SLF4j+Logback多了一个jar包,多的这个slf4j-log412.jar是用来适配SLF4j和Log4j并整合它们;

                2)每一个日志实现框架都有自己的配置文件,当选择好日志门面+日志实现依赖包组合后,日志最终以日志实现框架的配置来实现日志的相应功能。

     2、统一日志框架

       问题:springboot导入其它框架时其它框架自带了日志框架,这时我们需要将工程内所有框架的日志框架进行统一,使用springboot默认的日志框架。

       常用框架自带日志:spring(Commons-logging)、Hibernate(Jboss-logging)、。。。。。

       解决流程图如下:

      

     统一日志的逻辑:1)先将引入框架的默认依赖包排除掉,如spring要排除Commons-logging的jar包;

                                  2)再使用中间包取代原先的默认日志,如果不使用中间包则日志打印会出错;

                                  3)导入 SLF4j的实现日志。

    中间包替换表格:

要排除的默认日志框架中间日志框架
JCL(Jakarta Commons Logging)jcl-over-slf4j.jar
log4j APIlog4j-over-slf4j.jar
JUL(java.util.logging)jul-to-slf4j.jar

   三、springboot 日志关系

         1、springboot底层日志依赖关系

        

           spring-boot-starter:默认实现了spring-boot-starter-logging依赖,spring-boot-starter-logging用来管理springboot的日志实现;如上图所示,我们可以看到spring-boot-starter-logging又默认实现了jul-to-slf4j、log4j-over-slf4j、jcl-over-slf4j三个中间日志jar包以及Logback核心日志包;这四个日志jar包又继承了slf4j-api.jar日志门面。

            springboot统一日志框架:1)其它框架排除自身默认框架,如spring要排除Commons-logging的jar包;

                                                      2)因为spring-boot-starter-logging默认实现了jul-to-slf4j、log4j-over-slf4j、jcl-over-slf4j三个                                                               中间日志jar包,所以springboot会自动集成slf4j-api和Logback以及中间层日志包,这样其                                                               它的框架如Mybatis的日志框架也就与工程默认日志框架同步了:slf4j-api  +  Logback

            思考:springboot底层默认排除了spring的日志框架,所以springboot的日志框架组合默认是: slf4j-api  +  Logback

            如下是spring-core的依赖默认排除了spring的日志框架

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

           2、总结:springboot统一日志只需要将引入依赖包默认的日志框架排除即可

四、springboot默认日志配置

      1、默认配置内容:日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL;Spring Boot中默认配置ERRORWARNINFO级别的日志输出到控制台;日志默认输出在控制台,日志输出内容springboot底层已配置好,开箱即用。

      2、application.properties文件中配置日志属性


logging.level.* : 作为package(包)的前缀来设置日志级别;日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL
logging.file :配置日志输出的文件名,也可以配置文件名的绝对路径。
logging.path :配置日志的路径。如果没有配置logging.file,Spring Boot 将默认使用spring.log作为文件名;当logging.file与logging.path同时存在时,springboot按照logging.file定义的路径输出日志文件
logging.pattern.console :定义console中logging的样式。
logging.pattern.file :定义文件中日志的样式。
logging.pattern.level :定义渲染不同级别日志的格式。默认是%5p.
logging.exception-conversion-word :.定义当日志发生异常时的转换字
PID :定义当前进程的ID

    3、根据不同的日志系统,springboot中你可以按如下规则组织配置文件名,就能被正确加载:

         Logback:logback-spring.xmllogback-spring.groovylogback.xmllogback.groovy

         Log4j:log4j-spring.propertieslog4j-spring.xmllog4j.propertieslog4j.xml

         Log4j2:log4j2-spring.xmllog4j2.xml

         JDK (Java Util Logging):logging.properties

     4、引入自定义的logback.xml文件,在properties文件夹中进行如下声明

logging.config=classpath:logging-test.xml

    5、springboot集成log4j:

    方式一:

    第一步:将log4j对应的中间日志框架log4j-over-slf4j.jar依赖清除掉;

    第二步:将logback的依赖清除掉;

    第三步:引入log4j及其适配层日志框架的依赖,最后log4j就能成功运行了。

   方式二:

   第一步:移除spring-boot-starter-logging依赖包;

   第二步:添加spring-boot-starter-log4j依赖包,ok。

    6、springboot的logback.xml配置内容:如果我们觉得springboot默认的配置内容满足不了我们的需求,我们也可以自定义logback日志的xml对logback日志进行重新配置;

    7、自定义logback.xml:springboot会自动加载此文件,详情请见本节中的第3小节

         注意:springboot官方推荐使用logback-spring.xml,相对于 logback.xml它的配置功能更加齐全,比如logback-spring.xml可以配置profile多环境日志,logback.xml则不能实现此功能

 8、logback.xml语法结构请参考此博客:springboot最全日志配置详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值