日志
1. 日志框架
- 小故事
小张,开发一个大型系统;
1. System.out.pringln('') 将关键数据打印在控制台;去掉?下载一个文件?
2. 框架来记录系统的一些运行时信息;日志框架;zhangloging.jar
3. 高大上的功能?异步模式?自动归档?xxxzhanglogging-good.jar
4. 将以前框架卸载下来?换上新的框架,重新修改之前的api;zhanglogging-prefect.jar
5. jdbc--数据库驱动;
写了一个统一的接口层;日志门面(日志的一个抽象层);logging-abstract.jar;
给项目中导入具体的日志实现就可以了,我们之前的日志框架都是实现的抽象层 - 市面上的日志框架
lul,jcl,jboss-logging,logback,jog4j,log4j2,slf4j。。。
左边选一个门面(抽象层),右边来选一个实现
日志门面:slf4j
日志实现:logback - spring boot:底层时 spring框架,spring框架默认使用的时 jcl
spring boot选用 slf4j和 logback
2. slf4j 使用
1. 如何在系统中使用 slf4j
- 以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象里面的方法。
-
官方地址 http://www.slf4j.org/manual.html
给系统里面导入 slf4j 的jar 和logback的实现 jarimport 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以后,配置文件还是做成日志实现框架字节本身的配置文件。
2. 遗留问题
- a(slf4j+logback):spring(commons-logging),hibernate(jboos-logging),mybatis,xx
统一日志记录,即使是别的框架和我一起统一使用 slf4j进行输出?
如何让系统中所有的日志统一到 slf4j
- 将系统中其他日志框架先排除出去
- 用中间包来替换原有的日志狂降。
- 我们导入 slf4j其他的实现
3. spring boot日志关系
- starter 每一个启动器【场景】都要依赖的
spring boot使用它来做日志功能<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
starter里面依赖的 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <dependency>
底层依赖关系:总结:- spring boot低沉也是 slf4j+logback的方式进行日志记录
- spring boot也把其他的日志都替换成了 slf4j
- 中间替换包
- 如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉。
spring 框架用的是 commons-logging;
- spring boot能自动适配所有的日志,而且底层使用 slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志排除掉。
4. 日志使用
1. 默认配置
- spring boot默认帮我们配置好了日志