市场上的日志框架
市场上的日志框架有很多,比如JUL,JCL,Jboss-logging,logback,log4j,log4j2,slf4j等。
这些日志主要分为两个部分:
- 日志门面(日志的抽象层):JCL,SLF4j,Jboss-logging
- 日志实现:log4j,log4j2,logback,JUL
而在SpringBoot中,最终我们会选择SLF4j和logback这样的组合。
SLF4j的使用
在日常开发的时候,日志记录方法的调用,不应该直接调用日志的实现类,而是调用日志抽象层里面的方法。
在使用SLF4j之前需要导入SLF4j的jar和logback的实现jar。
示例:
public class HelloWorld{
public static void main(String[] args){
Logger logger=LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World!!!");
}
}
但是在SpringBooot中会遇到如下问题:某个a项目使用的是slf4j+logback模式,但是项目中Spring使用的是commons-logging日志,Hibernate使用的是Jboss-logger。所以有时候我们需要统一日志记录。
总结:
- 将系统中其他日志框架先排除出去
- 用中间包来代替原来的日志框架
- 在导入slf4j的其他实现
SpringBoot日志关系
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
SpringBoot使用它来做日志功能。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
总结:
- SpringBoot底层也是使用SLF4j和logback的方式进行日志记录。
- SpringBoot也会把其他的日志文件都替换成了SLF4j。
- 也使用了中间替换包
- 如果需要引入其他的日志框架,一定要把这个框架的默认日志文件依赖移除掉。
示例:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
日志文件的编写
logging.level.com.learn=trace #设置显示日志的等级
#不指定路径则在当前项目下生成springboot.log日志
#也可以指定完整的路径
logging.file.name=E:/springboot.log
#在当前磁盘的根路径下创建spring文件夹和里面的log文件夹,使用spring.log作为默认文件
logging.path=/spring/log
#在控制台输出日志的格式
logging.pattern.console=%d{yyyy-mm-dd}[%thread]%-5level %logger{50} -%msg%n