JAVA-Web后端学习6 日志技术

生まれかわる恋のために,私はいま蝶になってふるえてる

日志

如果我们只是单纯地使用System.out.println()来输出中间结果记录日志,存在以下问题

①只能输出到控制台,无法输出到文件或者数据库,不利于保存和记录
②无法记录日志,不便于项目的维护和扩展
③代码中标准输出语句过多不利于我们后期的维护

日志技术

日志:用于记录应用程序中的各项信息,包括运行信息、状态信息、报错信息等

JAVA中常用的日志技术为Logback,而外层日志框架为Slf4j(Simple Logging Facade for JAVA,简单日志门面,提供了一套日志操作的标准接口以及抽象类,允许应用程序使用不同的底层日志框架)

Logback快速入门

准备工作:

①引入logback依赖(SpringBoot项目中已传递该依赖)、配置文件logback.xml
②定义日志记录对象logger,记录日志

首先,我们创建一个SpringBoot项目,可以看到其中已有关于logback相关的依赖
image

接下来引入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()+" : 结束计算...");
    }

}

输出结果如下:
image

使用日志框架,在类上标明注解@Slf4j,Lombok会在编译时自动生成private static final Logger log = LoggerFactory.getLogger(YourClassName.class);这行代码,接下来直接调用log.debuglog.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 .");
    }

}

image

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>

日志级别

日志级别指的是日志信息的类别,日志都会分级别,常见的日志级别如下(由低到高)
image

可以在XML文件中灵活配置日志的级别(大于等于配置级别的日志才会输出)

<!-- 日志输出级别 -->
<root level="debug">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</root>
posted @ 2026-03-21 19:01  tcswuzb  阅读(1)  评论(0)    收藏  举报