SpringBoot日志实现
- SpringBoot是现今市场上最火爆用来简化spring开发的框架,springboot日志也是开发中常用的日志系统。
- SpringBoot 默认就是使用SLF4J作为日志门面,Logback作为日志实现来记录日志。
入门案例
// application.properties文件
logging.level.com.guizy=trace
logging.pattern.console=%d{yyyy-MM-dd} [%level] -%m%n
logging.file.path=/Users/guizhaoyang/Desktop/springboot_log
package com.guizy.springboot_log;
import org.apache.logging.log4j.LogManager;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringBootLogApplicationTests {
@Test
public void test01() {
/*
入门案例
SpringBoot日志具体实现
级别测试
默认是info级别;
logback的风格输出, (Springboot默认采用的是slf4j+logback作为日志实现)
*/
Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
@Test
public void test02() {
/*
在spring-boot-starter-web依赖图中,观察到除了logback实现,还依赖了jul,log4j2等日志实现的桥接器
使用log4j2的日志实现, 观察桥接器是否起作用
通过观察日志信息,发现扔使用的是slf4j+logback来实现的;说明桥接器起了作用;通过log4j+桥接器来实现了slf4j+logback的方式
*/
org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringBootLogApplicationTests.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
@Test
public void test03() {
/*
application.properties(yml)是springboot的核心配置文件(用来简化开发使用)
我们也可以通过该配置文件,修改日志相关的配置
在springboot核心配置文件中配置:
logging.level.com.guizy=trace
logging.pattern.console=%d{yyyy-MM-dd} [%level] -%m%n
*/
Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
// 2022-03-31 [ERROR] -error信息
// 2022-03-31 [WARN] -warn信息
// 2022-03-31 [INFO] -info信息
// 2022-03-31 [DEBUG] -debug信息
// 2022-03-31 [TRACE] -trace信息
}
@Test
public void test04() {
/*
将日志输出到文件中
使用logging.file.path来配置文件路径下的文件夹(logging.file直接配置文件的形式已经过时,不使用)
在配置的文件夹下,日志文件生成的名字为spring.log
logging.level.com.guizy=trace
logging.pattern.console=%d{yyyy-MM-dd} [%level] -%m%n
// 文件夹为:springboot_log,文件名字为spring.log
logging.file.path=/Users/guizhaoyang/Desktop/springboot_log
*/
Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
}
Springboot使用日志拆分等功能
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"></property>
<!-- 配置文件的输出的路径-->
<property name="logDir" value="/Users/guizhaoyang/Desktop"></property>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<target>
System.err
</target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 配置文件的appender 可拆分归档的文件 -->
<appender name="roll" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输入格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!-- 引入文件位置 -->
<file>${logDir}/roll_logback.log</file>
<!-- 指定拆分规则 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按照时间和压缩格式声明文件名 压缩格式gz -->
<fileNamePattern>${logDir}/roll.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
<!-- 按照文件大小来进行拆分 -->
<maxFileSize>1KB</maxFileSize>
</rollingPolicy>
</appender>
<logger name="com.guizy" level="info" additivity="false">
<appender-ref ref="roll"/>
<!-- <appender-ref ref="consoleAppender"/>-->
</logger>
</configuration>
@Test
public void test05() {
/*
如果是需要配置日志拆分等相对高级的功能
那么application.properties就达不到需求了
需要使用日志实现相应的配置文件
例如我们现在使用的是logback日志实现
那么就需要在类路径resources下,配置logback.xml
*/
Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
for (int i = 0; i < 2000; i++) {
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
}
如何将springboot中logback替换为log4j2
由于log4j2性能的强大
当今市场上越来越多的项目选择使用slf4j+log4j2的组合
springboot默认使用的是slf4j+logback的组合
- 我们可以将默认的logback替换成为log4j2
- 1.启动器依赖,间接的依赖logback
- 所以需要将之前的环境中,logback的依赖去除掉
- 2.添加log4j2依赖
- 3.将log4j2的配置文件log4j2.xml导入到类路径resources下面
- 1.启动器依赖,间接的依赖logback
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除掉logback的依赖-->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加log4j2依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
添加log4j依赖
<?xml version="1.0" encoding="utf-8" ?>
<!--<Configuration status="debug">--> <!-- 可以详细打印出系统的日志 -->
<Configuration>
<!-- 配置appender,appenders中可以配置多个appender-->
<Appenders>
<!-- 控制台appender -->
<Console name="consoleAppender" target="SYSTEM_OUT">
</Console>
</Appenders>
<Loggers>
<!-- 配置root logger -->
<Root level="trace">
<AppenderRef ref="consoleAppender"/>
</Root>
</Loggers>
</Configuration>
@Test
public void test06() {
Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}