文章目录
这里使用的日志门面是SlF4j,日志实现Logback
1. 日志的级别
1、打印debug,info,error级别的信息:
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LoggerTest {
//注意这里LoggerFactory包别导错了
//打印当前类LoggerTest的信息
private final Logger logger
= LoggerFactory.getLogger(LoggerTest.class);
@Test
public void test1(){
logger.debug("debug...");
logger.info("info...");
logger.error("error...");
}
}
输出结果:
2020-03-06 17:17:14.360 INFO 13140 --- [ main] com.hh.sell.LoggerTest : info...
2020-03-06 17:17:14.361 ERROR 13140 --- [ main] com.hh.sell.LoggerTest : error...
这里没有输出debug级别的信息,因为系统默认的级别为Info,比info级别大的能够输出,比info级别小的不能输出,可以查看日志级别,ctrl+N:
2. lombok工具的使用
平时使用lombok都是为了方便,可以不用写get,set,构造方法等,由于我们写日志类每次都要写当前类,为了方便使用lombok提供的一个注解:@Slf4j
先导入lombok的依赖:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LoggerTest {
@Test
public void test1(){
String name = "heng";
String password = "123";
//打印结果
log.info("name:{},password:{}",name,password);
log.debug("debug...");
log.info("info...");
log.error("error...");
}
}
3. 日志的第一种配置方式(application.properties)
第一种配置方式,直接在application.properties中配置:
##########配置日志##########################
# 配置日志级别为debug
logging.level.com.hh=debug
#在控制台输出的日志格式
logging.pattern.console="%d - %msg%n"
#指定日志生成的文件路径
logging.file=F:/WeiXinDianCan_SpringBoot/sell.log
# 在文件输出的日志格式
logging.pattern.file=%d{yyyy-MM-dd} == [%thread]== %-5level == %logger{50} === %msg%n
控制台输出的日志:
文件中输出的日志:
4. 日志的第二种配置方式(logback-spring.xml)
各个logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各logger。其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得。
root本质上就是一个logger
日志的配置要实现两个目标:
1、将info日志和error日志区分开
2、每天输出一个日志
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--配置控制台日志-->
<!--appender指定日志的输出目的地是控制台-->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<!--配置日志的输出格式-->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--%d表示日期时间,msg表示日志信息-->
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<!--appender指定info日志的输出目的地为文件-->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--使得info日志中只输出info级别的信息-->
<!--即使配置info,也不会过滤掉Error级别的日志信息,因为高于info级别的会输出,因此使用onMatch-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<!--如果匹配,那么下面的规则就不会执行-->
<onMatch>DENY</onMatch>
<!--如果不匹配,执行下面的规则-->
<onMismatch>ACCEPT</onMismatch>
</filter>
<!--配置日志的输出格式-->
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--配置滚动策略:按照时间滚动,每天一个日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径,直接在日志文件名中带上时间-->
<fileNamePattern>F:/WeiXinDianCan_SpringBoot/info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!--appender指定error日志的输出目的地为文件-->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--error日志只输出error级别的日志信息-->
<!--根据级别过滤,这个配置项只输出Error级别的日志,过滤掉info级别的日志-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<!--配置日志的输出格式-->
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--配置滚动策略:按照时间滚动,每天一个日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径,直接在日志文件名中带上时间-->
<fileNamePattern>F:/WeiXinDianCan_SpringBoot/error.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!--root标识这个appender将会添加到这个logger,使用这个配置-->
<root level="INFO">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>
通过结果我们可以看到完成了我们想要的功能: