SpringBoot2--日志

前言

类似于JDBC + 数据库驱动(统一接口+实现类),日志也可以采取这种方式实现,SpringBoot默认的日志实现是使用slf4j+logback,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉

一、常用日志框架

市面上常见的日志框架有:JUL , JCL , Jboss-logging , logback , log4j , log4j2 , slf4j等等,他们的分类如下:

日志门面(日志的抽象层)日志实现
JCL(Jakarta Commons Logging) , SLF4J(Simple Logging Facade for Java), Jboss-loggingLog4j , JUL(java.util.logging ) , Log4j2, Logback

SpringBoot默认的日志实现是使用slf4j+logback,slf4j叫做日志门面,是一个统一的日志接口层,logback来做日志实现。

二、Sprigboot日志实现原理

1、基本原理

下图是使用slf4j如何实现各种日志框架,需要导入的包:
在这里插入图片描述
可以看到,只引入slf4j是不能够实现日志记录的,还需要引入slf4j-api.jar或者slf4j-nop.jar;
如果实现使用logback日志框架,需要引入logback-core.jar和logback-classic.jar;
如果实现使用log4j日志框架,需要引入slf4j-log412.jar(log4j适配slf4j的jar),log4j.jar。其他情况类似。
每一个日志实现框架都有自己的配置文件,使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件。比如实现框架选用logback,那么配置文件就写logback.xml这种,实现框架选log4j,那么配置问价就选log4j.xml这种。

2、框架整合

但是在实际项目中,我们所引入的不同框架的底层日志框架是不一样的。比如:
Spring使用JCL,Hibernate使用Jboss等等,我们就需要统一日志记录,让不同的框架统一使用slf4j进行输出,这样我们就不用写别的配置文件,统一使用logback进行配置。具体做法如下图:
在这里插入图片描述
如上图,比如Spring框架,为了达到上述目标,我们需要排除掉Spring底层的commons-logging包,(不引入Spring会报包找不到的错误)然后引入包装层jcl-over-slf4j,这个包装层jar的包路径,类名等都采用commons-logging的形式进行配置,但是底层实现是slf4j,最后添加logback的jar包。
统一日志记录的思路(SpringBoot实现统一日志记录为slf4j的做法):

1.先排除掉其他日志框架

2.然后用中间包来替换排除掉的日志框架(外表一样,内部变了)

3.最后再添加目标日志框架

SpringBoot引入新框架需注意
当SpringBoot引入新框架的时候,如果此框架使用了JUL,JCL,或者log4j,这个时候我们应该排除掉原来的日志框架,避免因为现在SpringBoot中存在相同的日志实现而造成jar包冲突冲突。

3、默认实现

SpringBoot默认的日志实现是使用slf4j+logback
在这里插入图片描述
如上图:
1.SpringBoot默认的日志实现是使用slf4j+logback
2.SpringBoot把其他日志(log4j2,jul)转化为slf4j

三、Sprigboot日志的使用与配置

1、使用日志

创建一个日志记录器,就可以输出日志,日志有五个级别

    //日志记录器
	Logger logger = LoggerFactory.getLogger(getClass());

	@Test
	void contextLoads() {
        //日志级别,由低到高
		//可以调整输出级别,在applicatin.properties文件中调整
		logger.trace("这是trace日志");
		logger.debug("这是debug日志");
		//springboot默认info级别,root级别,日志只会在整个级别的以后级别生效
		logger.info("这是info日志");
		logger.warn("这是warn日志");
		logger.error("这是error日志");
	}

输出结果

2020-09-25 17:26:13.117  INFO 7428 --- [           main] com.sxt.springboot.ApplicationTests      : 这是info日志
2020-09-25 17:26:13.118  WARN 7428 --- [           main] com.sxt.springboot.ApplicationTests      : 这是warn日志
2020-09-25 17:26:13.118 ERROR 7428 --- [           main] com.sxt.springboot.ApplicationTests      : 这是error日志

2、配置

级别控制

所有支持的日志记录系统都可以在Spring环境中设置记录级别(例如在application.properties中),SpringBoot默认是info级别(rootjibie)
格式为:‘logging.level.* = LEVEL’

logging.level:日志级别控制前缀,*为包名或Logger名
LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF(由低到高)
只有这个级别以及更高级别才会生效

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
输出日志文件

默认情况下,Spring引导只记录到控制台,不写入日志文件。如果你想写日志文件除了控制台输出之外,还需要设置logging.file.name或logging.file.path属性(用于例如,在您的application.properties中)。
logging.file.name,设置文件,可以是绝对路径,也可以是相对路径(当前项目下)。如:logging.file.name=/my.log或者logging.file.name=G:/my.log
logging.file.path,设置目录,会在当前项目根目录下创建spring.log文件,并写入日志内容,如:logging.file.path=/var/log
注:二者不能同时使用,如若同时使用,则只有`logging.file.name生效
默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO

日志格式

日志包含输出以下信息:

–日期和时间:毫秒精度,易于排序。
–日志级别:错误、警告、信息、调试或跟踪。
–线程ID。
–A—分隔符,用于区分实际日志消息的开始。
–线程名称:括在方括号中(可能会因控制台输出而被截断)。
–log名称:这通常是源类名(通常缩写)。
–日志消息。

# 在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
# 在文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
自定义日志配置

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项,logback-spring.xml中可以使用springProfile配置。
默认的命名规则,并且放在 src/main/resources 下面即可
如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,application.yml可以通过logging.config属性指定自定义的名字:
logging.config=classpath:logging-config.xml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值