SpringBoot与日志

日志

1.日志框架

与JDBC和数据库驱动的对应关系,面对功能的不断变化,所以使用面向接口编程,有一个同意的接口层:日志的门面(日志的抽象层)—logging-abstract.jar ;在项目中使用的时候导入具体的日志实现就可以了,日志框架都是对日志抽象层的实现

SpringBoot与日志
使用时:选一个抽象层,选一个日志的实现

JCL :2014 年最后一次更新
jboss-logging :一般是在一些特殊的框架中使用
SLF4J log4j logback 是同一个人写的,并且,logback 是log4j 的升级版
SLF4j====Logback
SpringBoot :底层是Spring框架,Spring默认框架JCL,SpringBoot 选用的是:SLF4j 和logback

2.如何在SpringBoot中使用SLF4j

日志方法的调用应该调用日志的抽象层而不是调用日志的实现类,使用的时候:导入SLF4J 的jar 包和logback 的jar 包。
每一个日志实现框架都有自己的配置文件,使用slf4j ,但配置文件还是日志实现框架的配置文件【slf4j 仅仅是提供了一个统一的接口层】

如何在不同的情况下使用slf4j ----实现框架不是logback
https://www.slf4j.org/images/concrete-bindings.png
SpringBoot与日志
一些无法直接识别SLF4J 的实现框架,中见就需要加入一个识别slf4j 方法调用实现框架的jar 包【适配层】

3.关于日志框架使用的问题

例如:开发a系统(基于slf4j+logback)同时这个系统的开发依赖于其他框架并且这些框架在底层使用了日志,他们的日志框架各有不同;Spring(JCL),Hibernate(jboss-logging),,,,
如何统一日志框架,最后都使用slf4j+logback 输出。
SpringBoot与日志

使用其他的替换包替换原本的日志实现【排除原本日志实现,再导入替换依赖】,这样新的jar 包,【在导入slf4j+logback】就是通过slf4j +logback 实现日志输出

SpringBoot与日志
可以看见依赖关系,就可以看见spring Boot日志底层依赖关系
SpringBoot与日志
SpringBoot使用的是slf4j+logback,把其他的日志都转化为了slf4j

例如:Spring的底层使用的是commos-logging 实现框架,在配置中SpringBoot是将他移除了的

SpringBoot 能够自动适配所有框架,并且底层在使用slf4j+logback ;SpringBoot 应用中如果要引入其他的框架,一定要将这个框架原本的日志实现框架移除就行了,springboot 会自动适配

2.日志的使用

//日志记录器
	Logger logger =LoggerFactory.getLogger(getClass());
	@Test
	public void contextLoads() {
		//记录方法
		//日志的级别:
		//由低到高:trace<debug<info<warn<error
		//在Spring Boot 框架中可以调整输出的日志级别,日志只会输出这个级别及跟高级别的内容
		//springBoot 的默认级别事info 所以只会输出这个级别及其更高级别
		//在properties 文件中设置日志级别
		
		logger.trace("这是trace日志....");  //跟踪
		logger.debug("这是debug日志....");   //调试信息
		logger.info("这是info 日志");
		logger.warn("这是warn日志");
		logger.error("这是error日志");
	}

在配置文件中的配置:

logging.level.指定的包 = 日志级别

在当前项目下生成spring.log 日志
logging.file  = springboot.log

在指定位置生成springboot.log 日志(完整路径)
logging.file = F:/springboot.log

在当前项目的磁盘的根目录下  
logging.path  = 指定目录     
使用spring.log 作为默认文件名

设置控制台日志文件输出格式
logging.pattern.console={格式}
设置文件中日志输出的格式
logging.pattern.file={格式}

SpringBoot与日志>SpringBoot与日志

3.使用自定义的指定的日志配置文件

SpringBoot与日志
例如:日志框架为:logback -----配置文件:logback.xml/logback-spring.xml
logback.xml :直接被日志框架识别
文件名加上spring 之后日志框架不会直接加载配置项,而是由springboot 解析,就可以使用springboot 的一个特性:profile

<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>
   根据不同的环境使用不同的配置

4.切换日志框架

根据转换图转换:https://www.slf4j.org/images/legacy.png