开发者学堂课程【SpringBoot快速掌握 - 核心技术:切换日志框架】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/612/detail/9239
切换日志框架
现在默认 springboot 是 slf4j +logback 方式,如果用 slf4j+logf4j 的方式,这个切换是有没意义的,因为 logf4j 本来就是因为作者觉得写的不好写了一个 logback 和 sjf4J 进行适配,那么该怎么切换成 logf4 j 呢?
根据日志关系图进行切换,假设现在想用 logf4j,那么首先要面向 slf4j 编程,中间得有一个适配包,那么需要先把其他的日志包都干掉,所以在 pom.xml 中分析依赖数:
第一件事实在依赖图中将 logback 删除。
第二件事日志关系图中其他的转成 slf4j,所以要将 log4j-over-slf4
删除,因为它是一个替换包。所以就变成了:
把其他的框架 jcl 和 jul 转化成 slf4j。
虽然面向 slf4j 编程,但是要用 logf4j 实现,那么就需要导入中间的一个适配层:
在 pom.xml 文件里导入:
org.slf4j
slf4j-log4j1
2/artifactId>
版本不用自己写,并且导入它的好处是在依赖图中找到 slf4j-log4j12 可以看到自动生成一个 log4j ,因为适配层的包本身就依赖 log4j 。
现在就相当于导入了适配层的包, slf4j 在系统中,其他的也替换完成,那么就可以使用 log4j 了。
运行看一下效果:
在控制台中显示
二月01,2018 5:07:14 下午
org.apache.catalina.core.StandardService startInternal
信息: Starting service [ Tomcat]
二月01,2018 5:07:14 下午
org.apache.catalina.core.StandardEngine startInternal
信息:Starting Servlet Engine: Apache Tomcat/8.5.27
二月01,2018 5:07:14 下午
org.apache.catalina.core.ApplicationContext log
信息:Initializing Spring embedded webApplicationContext
输出不像以前那么多日志了,因为已经切换到log4j了,而log4j没有配置文件。
新创建一个文件将log4j配置文件复制进去。
Log4j配置文件是被log4j框架识别的,执行启动起来可以看到记录都是log4j记录着。
比如:
###输出到控制台###
1og4j.appender.stdout = org.apache.log4j.consoleAppender
log4j.appender.stdout.Target = System.out
1g4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.1layout.ConversionPattern = %d{ABSOLUTE}
=== %5p %c{1}:%L-%
m
%n
启动发现已经切换了,不过这个切换时没有意义的,只是做一个演示。因为 log4j 设计不好,用 logback 替换。
切换日志框架:
可以按照 slf4j 的日志适配图,进行相关的切换;
Slf4j+log4j 的方式:(按照关系图进行导入和删除)
<dependency>
<groupId>org.springframework . boot</groupId>
<artifactId>spring-boot-starter-web</ artifactId><exclusions>
<exclusion>
<artfactId>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>
但是不推荐这样做只使用这种方式将原理掌握更深一点。
这样就用到 log4j2 了,分析这个依赖:
里面有 jcl、jul 将其他框架转成 slf4j,新添了 log4j-core 版本2.7和中间的适配包,这样就切换到 了 l og4j2,可以直接运行测试一下。
运行发现打印还是默认配置,在 spring boot 里面默认支持 log4j2,log4j2 的配置文件是 log4j2.xml 和 log4j2-file.xml,也可以按照之前一样制定自己的 log4j2 配置文件最好加上 spring。
切换为 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>