SpringBoot_日志
SLF4J
SLF4J使用方式:
在开发过程中,我们不应该直接调用日志的实现类,而是应该调用日志抽象层里面的方法;
示例:
// 导入 slf4j的jar和 logback 的实现jar
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
// 调用LoggerFactory的 getLogger(记录器) 去记录 HelloWorld类的信息
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
//进行日志记录
logger.info("Hello World");
}
}
SLF4J使用原理:
SLF4J 绑定 logback : 应用程序 面向 SLF4J 进行编程,调用它的方法,在程序里面导入日志的 logback 实现
类jar包,由logback 的 jar包进行日志记录;
SLF4J 绑定 log4j : 应用程序 依旧面向 SLF4J 进行编程,依旧调用它的方法,然后在中间导入一个适配层(相当于向上实现了 SLF4J 的具体方法,向下真正进行日志记录的时候又调用 log4j 的 方法) ,在程序里面导入日志的 log4j 的jar包,由log4j 的 jar包进行日志记录;
…
注意点: 使用 slf4j 框架以后,配置文件还是做成日志实现框架本身的配置文件;
SLF4J统一日志:
让系统中所有的日志都统一到 SLF4J 中:
1,将系统中其他日志框架先排除出去;
2,用中间jar包来替换原有的日志框架;
3,导入SLF4J 的对应其他实现类jar包 ;
日志适配图:
SpringBoot 日志
SpringBoot 日志关系:
在 SpringBoot 的 web 项目 pom.xml 中,默认导入了 spring-boot-starter-web 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-web下包含 spring-boot-starter-logging ,SpringBoot 采用它来做日志功能:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.2.5.RELEASE</version>
<scope>compile</scope>
</dependency>
SpringBoot 的日志底层依赖关系:
SpringBoot 如果引入其他框架,要把这个框架的默认日志依赖移除掉:
示例:SpringBoot 底层是Spring,Spring框架用的日志依赖是commons-logging;
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐core</artifactId>
<exclusions>
<exclusion>
<groupId>commons‐logging</groupId>
<artifactId>commons‐logging</artifactId>
</exclusion>
</exclusions>
</dependency>
注意点: SpringBoot 2.0及以上版本没有这样的写法;
总结:
SpringBoot 能自动适配所有的日志;
SpringBoot 底层使用 slf4 j+ logback 的方式记录日志;
SpringBoot 引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;
SpringBoot 日志使用:
SpringBoot 日志默认配置 :
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot03LoggingApplicationTests {
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
/**
* 日志的级别:
* 由低到高 trace < debug < info < warn < error
* 可以调整输出的日志级别;日志就只会在这个级别及以后的高级别生效
* SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;
*/
logger.trace("这是trace日志...");
logger.debug("这是debug日志...");
logger.info("这是info日志...");
logger.warn("这是warn日志...");
logger.error("这是error日志...");
}
}
SpringBoot 修改日志默认配置:
//调整项目下 com.yp 目录下日志级别为 debug 级别
logging.level.com.yp=debug
//不指定路径:在当前项目下生成 myspringboot.log 日志
//指定完整的路径:在对应路径下生成 myspringboot.log 日志
logging.file=E:/myspringboot.log
//在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log
//在控制台输出的日志的格式
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:表示换行符
logging.file 和 logging.path 比较:
logging.file | logging.path | 示例 | 描述 |
---|---|---|---|
(none) | (none) | 只在控制台输出 | |
指定文件名 | (none) | myspringboot.log | 输出日志到 myspringboot.log 文件中 |
(none) | 指定目录 | /my | 输出到指定目录下的默认文件 spring.log 中 |
SpringBoot 指定日志配置:
给类路径下放上每个日志框架自己的配置文件即可,这样 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 UtilLogging) | logging.properties |
注意点:
*logback.xml:*直接就被日志框架识别了;但是不能使用 SpringBoot 的高级 Profile 功能,如果使用 profile功能,会有以下错误 :
no applicable action for [springProfile]
*logback-spring.xml:*日志框架就不会直接加载日志的配置项,由 SpringBoot 解析日志配置,可以使用SpringBoot 的高级 Profile 功能;
<springProfile name="staging">
<!‐‐ configuration to be enabled when the "staging" profile is active ‐‐>
<!‐‐可以指定某段配置只在某个环境下生效 ‐‐>
</springProfile>
SpringBoot 切换日志框架:
可以按照 SLF4J 的日志适配图,进行相关的切换;
slf4j + log4j 的方式;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
<exclusions>
<exclusion>
<artifactId>logback‐classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
<exclusion>
<artifactId>log4j‐over‐slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j‐log4j12</artifactId>
</dependency>
log4j2 的方式;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring‐boot‐starter‐logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐log4j2</artifactId>
</dependency>