SpringBoot选用slf4j和logback,slf4j作为通用接口门面,而logkack是具体的实现。
在开发过程中,日志记录方法的调用,不应该直接调用日志的实现类,而是调用日志抽象层里面的方法。需要导入slf4j的jar和locback的实现jar
import 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与不同具体日志实现框架集成
每一个日志的实现框架都有自己的配置文件,使用slf4j以后,配置文件还是使用实现框架的配置文件。
统一日志
对于系统中使用多个框架,比如Spring,hibernate等,他们自己都有相关的日志实现方式,Spring采用commons-logging,hibernate使用jboss-logging,现在想要使用slf4j+logback的形式统一记录日志。
如何将系统中所有的日志都统一到slf4j:
1、将系统中其他日志框架先排除出去
2、用中间包来替换原有的日志框架
3、导入slf4j其他的实现
SpringBoot使用slf4j:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
底层依赖关系
总结:
1、SpringBoot底层也是使用slf4j+logback的方式进行日志记录
2、SpringBoot把其他日志都替换成了slf4j
3、采用中间替换包的形式
4、如果要引入其他的框架,那么必须把引入框架的日志依赖移除,例如SpringBoot会引入Spring框架,Spring使用commons-logging记录日志,在引入依赖时,SpringBoot将日志依赖排除。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
SpringBoot能自动适配所有的日志,而底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要将这个框架依赖的日志框架排除掉即可。
SpringBoot默认已经配置好了日志,可以直接使用
public void testLogger(){
Logger loger = LoggerFactory.getLogger(SpringBoot_test.class);
loger.trace("this is trace logger");
loger.debug("this is debuger logger");
loger.warn("this is warn logger");
loger.info("this is info logger");
loger.error("this is error logger");
}
日志输出级别:trace<debug<info<warn<error。可以调整输出的日志级别,日志只会在这个级别及以后的高级别生效,默认是info级别的,可以在配置文件中使用
logging.level.具体包名=日志级别
//在E盘下创建Spring文件夹和里面的log文件夹,使用spring.log作为默认文件
logging.path=E:/spring/log
//当前项目下生成springboot.log,可指定具体位置,如E:/springboot.log,表示在E盘下
//会存放springboot的日志,并且名字为springboot.log
logging.file=springboot.log
//设置控制台输出格式
logging.patter.consle
//设置文件中日志的格式
logging.patter.file
logging.path和logging.file只需要配置一个就可以了,一般配置path。
指定配置文件,给类路径下放入每个日志框架自己的配置文件即可,SpringBoot就不使用它默认的配置。
Logging System | Customization |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
没有带后缀的,如logback.xml是日志系统自己识别加载,而带了spring后缀的,则由SpringBoot加载,可以实现一些高级功能,如profile,指定某段配置只在特定环境下生效。激活方式同之前配置文件的profile形式
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
SpringBoot默认的日志启动器有两个
spring-boot-starter-log4j2
spring-boot-starter-logging
默认使用starter-logging,使用slf4j+logback
如果需要切换,只需要排除starter-logging,添加starter-log4j2依赖即可