《从零开始的java从入门到入土的学习生活——JavaWeb后端篇》Chapter14——JavaWeb后端篇学习记录——日志技术

一、日志技术

1、日志

程序中的日志,是用来记录应用程序的运行信息、状态信息、错误信息的。

2、日志框架

|-------------|-----------------------------------------------------------------------------|
| JUL | 这是JavaSE平台提供的官方日志框架,也被称为JUL。配置相对简单,但不够灵活,性能较差。 |
| Log4j | 一个流行的日志框架,提供了灵活的配置选项,支持多种输出目标。 |
| Logback | 基于Log4j升级而来,提供了更多的功能和配置选项,性能由于Log4j。 |
| Slf4j | (Simple Logging Facade for Java)简单日志门面,提供了一套日志操作的标准接口及抽象类,允许应用程序使用不同的底层日志框架 |

3、Logback的使用

①引入依赖

XML 复制代码
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.11</version>
</dependency>

②引入配置文件

可以通过ai生成:

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="info">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

③记录日志

java 复制代码
    //定义日志记录对象
    private static final Logger log = LoggerFactory.getLogger(LogTest.class);

    @Test
    public void testLog() {
        log.debug("开始计算");
        int sum=0;
        int[] nums={1,5,3,2,1,4,5,4,6,7,4,34,2,23};
        for (int i = 0; i < nums.length; i++) {
            sum+=nums[i];
        }
        log.info("计算结果为:"+sum);
        log.debug("计算结束");
    }

lombok中提供的@Slf4j注解,可以简化定义日志记录器这步操作。添加了该注解,就相当于在类中定义了日志记录器,就下面这句代码:

private static Logger log = LoggerFactory. getLogger(Xxx. class);

启动测试,结果为:

④增加配置文件

常用的两种输出日志的位置:控制台、系统文件。

若需要输出日志到控制台,添加如下配置:

XML 复制代码
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <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>

若需要输出到文件,添加下面的配置:

XML 复制代码
<!-- 按照每天生成日志文件 -->
<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>

日志开关------(开启日志(ALL),取消日志(OFF))

XML 复制代码
<!-- 日志输出级别 -->
<root level="ALL">
    <!--输出到控制台-->
    <appender-ref ref="STDOUT" />
    <!--输出到文件-->
    <appender-ref ref="FILE" />
</root>

4、日志级别

日志级别指的是日志信息的类型,日志都会分级别,使用方法:log.日志级别(".......")

|-----------|-----------------------------------------|
| 日志级别 | 说明 |
| trace | 迫踪,记录程序运行轨迹【使用很少】 |
| debug | 调试,记录程序调试过程中的信息,实际应用中一般将其视为最低级别]【使用较多】 |
| info | 记录一般信息,描述程序运行的关键事件,如:网络连接、操作【使用较多】 |
| warn | 记录潜在有害的情况【使用较多】 |
| error | 错误信息【使用较多】 |

相关推荐
悟乙己44 分钟前
AFAC2026 赛题四金融长文本 Agent竞赛学习笔记:赛题解析(一)
笔记·学习·金融
霍霍的袁1 小时前
【C++】哈希表实现指南:从原理到开放定址法、链地址法的实现
c++·学习·哈希算法·散列表·visual studio
PC2005-cloud1 小时前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql
starsky762382 小时前
Agent学习——上下文工程(二)
学习
Dark_Fairy3 小时前
CMeKG_tools 知识图谱项目速成教程(13课共24H)
学习
悟乙己3 小时前
AFAC2026 赛题四金融长文本 Agent竞赛学习笔记:关联技术(二)
笔记·学习·金融
我送炭你添花4 小时前
ASA原理与电子维修实战:前言 一路修来,一路学习
运维·网络·学习
代码山河5 小时前
第一个Java程序:Hello World从零编写与运行
java·学习·架构·教程·面向对象·项目
aqiu1111115 小时前
蓝桥杯省一学习计划:每天 2 小时,12 周高效备赛
学习·职场和发展·蓝桥杯
Filthyfrank6 小时前
I2C vs I3C时序差异
学习