springboot 日志框架的使用与切换


springboot 默认实现了日志框架,slf4j 作为抽象层,logback 作为实现层。springboot 把其他的日志框架都转换成 slf4j,用 logback 来实现。当然,我们也可以根据需要自己切换要使用的日志框架。

日志的使用

如下示例是 springboot 中日志框架使用的一个单元测试。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootLogTest {
	Logger logger = LoggerFactory.getLogger(getClass());

	@Test
	public void logTest() {
		logger.trace("这是trace日志");
		logger.debug("这是debug日志");
		logger.info("这是info日志");  // springboot 默认设置的 info级别
		logger.warn("这是warn日志");
		logger.error("这是error日志");
	}
}

日志的级别:trace < debug < info < warn < error,我们可以在配置文件中设置级别,在这个级别及更高级别的日志就会被打印或输出到指定位置。
运行上述测试用例,日志打印如下图:可以知道 springboot 默认设置的打印级别是 info 级别,或者称为 root 级别。
在这里插入图片描述如果要更改输出的日志级别,可以在配置文件 application.properties 中配置。如下配置指定 com.xiao 包下的类的日志级别为 trace,其他的类则使用默认的 springboot 设置的级别

logging.level.com.xiao=trace

如果不进行配置,日志默认只输出到控制台,如果想要输出到其他位置,需要在配置文件中进行配置。

#如果直接写文件名,则日志会输出到当前项目下;还可以写绝对路径,输出到指定盘符的文件中
#logging.file=springboot.log
#logging.file=F:/springboot.log

#在当前盘符的根路径下创建 springboot 文件夹,在里面创建 log 文件夹,
#日志会输出到其中的 默认文件 spring.log 中,
logging.path=/springboot/log

如果想要使用自己的配置文件,可以根据自己使用的日志框架创建一个对应的配置文件放在 classpath 路径下即可。对应关系如下:(带 -spring扩展名的由 springboot 解析日志配置,可以使用一些 springboot 的高级特性,如指定激活环境。)

Logging SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties

日志的输出格式也可以进行配置:

#指定控制台输出的日格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
#指定输出到文件中的日志格式
logging.pattern.file=%d{yyyy-MM-dd} --- [%thread] --- %-5level --- %logger{50}  --- %msg%n

%d :表示日期时间
%thread :表示线程名
%-5level :级别从左显示5个字符宽度,- 表示左对齐
%logger{50} :表示 logger 名字最长为50个字符,否则按照句号分割
%msg :表示日志消息
%n :表示换行

日志框架的切换

由于 springboot 的日志框架默认是使用 slf4j + logback 实现的,如果有其他需要,可能相应换成其他实现的日志框架,springboot 也能支持切换成其他日志框架。
slf4j 的实现
springboot 默认是使用的 slf4j 的接口,logback 的实现。如果想用其他实现,该怎么办呢。可以在 slf4j 官网找到如下图:
在这里插入图片描述例如:

  • 如果 slf4j 要绑定 logback,我们的应用程序将调用 slf4j 接口,logback 进行实现,这种情况只要调用 slf4j 的 jar 包 (slf4j-api.jar )和 logback 的jar包(logback-classic.jar、logback-core.jar);
  • 如果 slf4j 要绑定 log4j,我们的应用程序将调用 slf4j 接口,中间需要一个适配层 ,适配层调用了 log4j 的实现方法。用到了 slf4j 的 slf4j-api.jar 、适配层的 slf4j-log412.jar 和 log4j 的 log4j.jar 。
  • 每个日志实现框架都有自己的配置文件,使用 slf4j 后,配置文件还是使用日志实现框架自己的配置文件

springboot 在使用其他框架时,其他框架可能使用的是其他日志框架,比较混乱。那么,如何统一日志框架呢?可以在官方网站找到如下图:
在这里插入图片描述
例如:

  • 我想用统一使用 slf4j + logback,则该应用程序涉及的其他日志框架 commons logging 用 jcl-over-slf4j.jar 替换、log4j 用 log4j-over-slf4j.jar 替换、java.util.logging 用 jul-to-slf4j.jar 替换,这样,这些框架都可以使用 slf4j 接口调用了
  • 不管要使用哪种日志实现,都是把其他实现框架的日志包排除,如果只是做排除,其他使用这个日志实现的框架可能无法正常运行,所以要用中间包替换原来的日志包,最后导入要使用的日志包。

日志框架的切换,可以根据上图对 jar 包依赖进行排除与补充
示例:
假如现在想用 log4j ,需要排除 springboot 默认依赖的 logback 依赖,log4j-over-slf4j.jar 是 log4j 转成 slf4j 要用的,而我们现在就是想用 log4j,所以不需要这个转换),slf4j-log4j12.jar 是 log4j 要用的中间包,需导入。

	<dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-starter-web</artifactId>
  		<exclusions>
  			<exclusion>
  				<groupId>ch.qos.logback</groupId>
  				<artifactId>logback-classic</artifactId>
  			</exclusion>
  			<exclusion>
  				<groupId>org.slf4j</groupId>
  				<artifactId>log4j-over-slf4j</artifactId>
  			</exclusion>
  		</exclusions>
  	</dependency>
  	<dependency>
  		<groupId>org.slf4j</groupId>
  		<artifactId>slf4j-log4j12</artifactId>
  	</dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值