![3ee381889652ce055c57c763e51579af.png](https://i-blog.csdnimg.cn/blog_migrate/de1e7a9b1d3ab14f32cb2df451788df9.jpeg)
1、日志框架
小张;开发一个大型系统;
1、System.out.println("");将关键数据打印在控制台;去掉?写在一个文件?
2、框架来记录系统的一些运行时信息;日志框架 ;zhanglogging.jar;
3、高大上的几个功能?异步模式?自动归档?xxxx?zhanglogging-good.jar?
4、将以前框架卸下来?换上新的框架,重新修改之前相关的API;zhanglogging-prefect.jar;
5、JDBC---数据库驱动;
写了一个统一的接口层;日志门面(日志的一个抽象层);logging-abstract.jar;给项目中导入具体的日志实现就行了;我们之前的日志框架都是实现的抽象层;市面上的日志框架; JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j
![055464145e58ae4e7d377209a04ebbda.png](https://i-blog.csdnimg.cn/blog_migrate/8c335cf200ad8b9b2f6a0408e765820d.png)
2、SLF4j使用 1、如何在系统中使用SLF4j https://www.slf4j.org
以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法; 给系统里面导入slf4j的jar和 logback的实现jar 。
![7792873c1966efef699052ccf5c27f26.png](https://i-blog.csdnimg.cn/blog_migrate/1867e9c73c13841a2a585833e77be206.png)
![7e6334df56644d0b557809a3c9dec11a.png](https://i-blog.csdnimg.cn/blog_migrate/9d696392c9de0714de13fb1e2c3db587.jpeg)
如何让系统中所有的日志都统一到slf4j;
1、将系统中其他日志框架先排除出去;
2、用中间包来替换原有的日志框架;
3、我们导入slf4j其他的实现 3、SpringBoot日志关系
![41251d2a942951a6a43c7b2ac2e0bf09.png](https://i-blog.csdnimg.cn/blog_migrate/9de6e5d1e6b5db7ef21fd1d85c31b42a.png)
底层依赖关系
![ebebc474283e80d9f569014602fcb382.png](https://i-blog.csdnimg.cn/blog_migrate/ea85421d40d0e55fbab178518ff5e13e.png)
总结:
1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录
2)、SpringBoot也把其他的日志都替换成了slf4j;
3)、中间替换包?
![4a2d67767597546c608245abfaf569f9.png](https://i-blog.csdnimg.cn/blog_migrate/ee891fb47a32945ed9a75a7df5e8a067.jpeg)
4)、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉? Spring框架用的是commons-logging
![c058741ec91608d2d99fdbe270f6844f.png](https://i-blog.csdnimg.cn/blog_migrate/f44d37b660a83f73f7d5da879e8be3a4.png)
SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要 把这个框架依赖的日志框架排除掉即可; 4、日志使用;1、默认配置
SpringBoot默认帮我们配置好了日志;
![7209d885a4e80b110de2c40a7e893167.png](https://i-blog.csdnimg.cn/blog_migrate/11d5ef38382b3a9121ea93485e3d1a36.jpeg)
![b071e060a175c0bec6ccbd4398e3dd8c.png](https://i-blog.csdnimg.cn/blog_migrate/9104b089cfdb69ab61bfd63eb4401265.png)
SpringBoot修改日志的默认配置
![8bdfdf6790c67c4671fbefff27632413.png](https://i-blog.csdnimg.cn/blog_migrate/92d077df71c50c9587be18ed8ef6f588.jpeg)
2、指定配置
给类路径下放上每个日志框架自己的配置文件即可;SpringBoot就不使用他默认配置的了
![e1d4096226feb400956039310d73efc8.png](https://i-blog.csdnimg.cn/blog_migrate/aaaa2f66bba6eedca921a126eb9d13f3.png)
logback.xml:直接就被日志框架识别了;logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot 的高级Profifile功能
<springProfile name="staging">
<!‐‐ configuration to be enabled when the "staging" profile is active ‐‐> 可以指定某段配置只在某个环境下生效
</springProfile>
如:
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <!‐‐ 日志输出格式: %d表示日期时间, %thread表示线程名, %‐5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息, %n是换行符 ‐‐>
<layout class="ch.qos.logback.classic.PatternLayout"> <springProfile name="dev"> <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ‐‐‐‐> [%thread] ‐‐‐> %‐5level %logger{50} ‐ %msg%n</pattern> </springProfile> <springProfile name="!dev"> <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ==== [%thread] ==== %‐5level %logger{50} ‐ %msg%n</pattern> </springProfile>
</layout>
</appender>
如果使用logback.xml作为日志配置文件,还要使用profifile功能,会有以下错误 :no applicable action for [springProfile] 5、切换日志框架
可以按照slf4j的日志适配图,进行相关的切换; slf4j+log4j的方式;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
<exclusions> <exclusion>
<artifactId>logback‐classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion> <exclusion>
<artifactId>log4j‐over‐slf4j</artifactId>
</dependency>
切换为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>