JAVA-Web后端学习6 日志技术
生まれかわる恋のために,私はいま蝶になってふるえてる
日志
如果我们只是单纯地使用System.out.println()来输出中间结果记录日志,存在以下问题
①只能输出到控制台,无法输出到文件或者数据库,不利于保存和记录
②无法记录日志,不便于项目的维护和扩展
③代码中标准输出语句过多不利于我们后期的维护
日志技术
日志:用于记录应用程序中的各项信息,包括运行信息、状态信息、报错信息等
JAVA中常用的日志技术为Logback,而外层日志框架为Slf4j(Simple Logging Facade for JAVA,简单日志门面,提供了一套日志操作的标准接口以及抽象类,允许应用程序使用不同的底层日志框架)
Logback快速入门
准备工作:
①引入logback依赖(SpringBoot项目中已传递该依赖)、配置文件
logback.xml
②定义日志记录对象logger,记录日志
首先,我们创建一个SpringBoot项目,可以看到其中已有关于logback相关的依赖

接下来引入logback.xml配置文件(这个是我从网上找的,其内容都是大差不差的)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger{50}: 最长50个字符(超出.切割) %msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
然后编写单元测试代码
我们先用普通代码测试一下:
@SpringBootTest
class DemoApplicationTests {
@Test
public void testLog() {
System.out.println(LocalDateTime.now()+" : 开始计算...");
int sum=0;
int[] nums = {1,2,3,4,5,6,7,8,9,10};
for(int number:nums) {
sum+=number;
}
System.out.println("Now Result is : "+sum);
System.out.println(LocalDateTime.now()+" : 结束计算...");
}
}
输出结果如下:

使用日志框架,在类上标明注解@Slf4j,Lombok会在编译时自动生成private static final Logger log = LoggerFactory.getLogger(YourClassName.class);这行代码,接下来直接调用log.debug和log.info相关方法即可
@Slf4j
@SpringBootTest
class DemoApplicationTests {
@Test
public void testLog() {
log.debug("Calc Stars .");
int sum=0;
int[] nums = {1,2,3,4,5,6,7,8,9,10};
for(int number:nums) {
sum+=number;
}
log.info("Now Result is : "+sum);
log.debug("Calc Ends .");
}
}

Logback配置文件详解
配置文件名:logback.xml
该文件可以直接对Logback日志框架输出日志进行控制,从而配置相关的格式、位置和日志开关等
常用的两种输出日志的位置:控制台,系统文件
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">...</appender>
<!-- 系统文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">...</appender>
开启日志设置为ALL,关闭日志设置为OFF
<!-- 日志输出级别 -->
<root level="ALL">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
接下来来看一份相对完整的日志输出文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%logger显示日志记录器的名称, %msg表示日志消息,%n表示换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
</encoder>
</appender>
<!-- 系统文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名, %i表示序号 -->
<FileNamePattern>D:/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!-- 最多保留的历史日志文件数量 -->
<MaxHistory>30</MaxHistory>
<!-- 最大文件大小,超过这个大小会触发滚动到新文件,默认为 10MB -->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="ALL">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
日志级别
日志级别指的是日志信息的类别,日志都会分级别,常见的日志级别如下(由低到高)

可以在XML文件中灵活配置日志的级别(大于等于配置级别的日志才会输出)
<!-- 日志输出级别 -->
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>

浙公网安备 33010602011771号