news 2026/9/1 22:36:22

太牛逼了,自己封装一个日志打印工具类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
太牛逼了,自己封装一个日志打印工具类

前言

我们都知道一个真相,在开发中,日志记录扮演着极其重要的角色。

无论是在开发调试阶段,还是在生产环境中,日志都能够帮助我们追踪系统状态、定位问题、分析性能。

甚至在出现问题时,日志往往是最有力的线索,基本都用它排查问题以及快速定位问题。

然而,我们在敲代码时,如果随便使用System.out.println()来输出日志,就会导致以下一系列问题,这是完全没必要的损耗,例如:

  • 性能差:System.out.println()直接输出到控制台,性能较差。

  • 不易管理:日志信息没有级别区分,也没有统一的格式。

  • 不方便追踪:没有详细的日志记录,尤其在生产环境,错误时很难追溯问题的根源。

因此,使用专业的日志框架进行日志记录显得尤为重要。

今天,我们将通过一个具体的实战案例,学习如何使用SLF4J + Logback配合 Lombok 提供的@Slf4j注解,封装出一个统一的日志工具类,帮助我们高效、优雅地管理日志输出。

为什么使用日志工具而非 System.out?

理由很简单,使用System.out.println()进行日志输出虽然简单,但它存在许多弊端。 尤其是随着项目的复杂度提高,逐渐暴露出性能、管理和可维护性等问题:

  • 性能问题:System.out.println()直接输出到控制台,每次调用都会消耗一定的系统资源。

    在高并发、频繁调用的情况下,控制台输出会显得非常低效,严重影响系统性能。

  • 日志级别管理:日志记录的级别(如调试信息、错误信息、警告信息等)在System.out.println()中完全无法区分。

    而使用日志框架时,我们可以清晰地定义日志级别,例如DEBUGINFOWARNERROR等。不同级别的日志可以分别输出到控制台或文件中,帮助我们更好地管理日志信息。

  • 格式统一性:在项目中,每个模块、每个开发人员可能都会采用不同的日志格式,导致日志混乱、难以阅读。

    使用日志工具类可以帮助我们统一日志输出格式,方便调试和查看。

因此,选择使用专门的日志框架来替代System.out.println(),不仅能提高性能和可维护性输出格式与级别

使用 SLF4J 和 Logback 组合

SLF4J(Simple Logging Facade for Java),它是 Java 中最常用的日志接口。 它并不直接提供日志实现,而是通过 API 抽象化了日志框架。

Logback 是与 SLF4J 配合使用的日志框架,它提供了强大的日志功能,能够管理日志的输出级别、格式化、存储等,谁用谁爽,不信你试试。

配置 Logback,引入相关依赖

首先,我们需要引入 SLF4J 和 Logback 相关的依赖。

在 Maven 中,我们可以像这样引入:

<dependencies> <!-- SLF4J 核心接口依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.32</version> </dependency> <!-- Logback 日志实现核心包 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.6</version> </dependency> <!-- Logback 核心依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.6</version> </dependency> </dependencies>

接下来,我们还需要在src/main/resources目录下创建logback.xml配置文件,配置日志输出格式、输出级别等:

<configuration> <!-- 定义控制台输出器 --> <appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 日志格式:时间 - 级别 [线程名] 类名 - 日志内容 --> <pattern>%d{yyyy-MM-dd HH:mm:ss} - %5p [%t] %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 根日志配置,级别为debug --> <rootlevel="debug"> <!-- 关联控制台输出器 --> <appender-refref="STDOUT" /> </root> </configuration>

在上面这个配置中,我们可以设置日志输出的格式,包括输出时间、日志级别、线程名、类名、日志内容等。

日志级别被设置为DEBUG,意味着所有DEBUG级别及以上的日志信息都会被输出。

当然这个级别在生产环境可以设置为更高一级的,比如ERROR,这样直接可对标排查报错等异常。

使用 Lombok 的 @Slf4j 注解

在传统日志框架中,开发者需要手动创建 Logger 对象,但使用 Lombok 提供的@Slf4j注解后,我们无需再手动声明 Logger。

Lombok 会自动为我们生成 Logger 实例。

import lombok.extern.slf4j.Slf4j; // 添加@Slf4j注解,自动生成log对象 @Slf4j publicclassLogExample{ publicstaticvoidmain(String[] args){ // 输出INFO级别的日志 log.info("This is an info message"); // 输出DEBUG级别的日志 log.debug("This is a debug message"); // 输出ERROR级别的日志 log.error("This is an error message"); // 输出WARN级别的日志 log.warn("This is a warning message"); } }

通过使用@Slf4j注解,我们不需要显式地创建 Logger 对象,直接使用 log 进行日志记录,简化了代码。

实战:API 日志统一、异常追踪日志输出
API 日志统一

在实际项目中,尤其是 Web 项目中,我们往往需要统一记录 API 请求和响应的日志。 通过日志工具,我们能够记录请求的详细信息,包括请求的 URL、参数、请求方法等,还能记录响应内容和状态。

以下是一个简单的示例,展示如何记录 API 日志:

import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import lombok.extern.slf4j.Slf4j; // 开启日志功能 @Slf4j @RestController publicclassAPIController{ // 定义一个测试接口 @GetMapping("/api/test") public String testAPI(){ // 记录请求到达日志 log.info("API request received for /api/test"); String response = "Hello, world!"; // 记录响应内容日志 log.info("API response: {}", response); return response; } }

在上面这个demo中,log.info()记录了 API 请求的日志和响应的日志。

你可以轻松地根据业务需求修改日志级别,例如在调试时使用 DEBUG,在出错时使用 ERROR 等。

异常追踪日志输出

在系统出现异常时,日志记录尤为重要,它能帮助开发者快速定位问题。

在生产环境中,异常日志通常包含详细的堆栈信息,这有助于我们追踪问题的根本原因。

以下是如何记录异常日志的示例:

import lombok.extern.slf4j.Slf4j; @Slf4j publicclassExceptionHandler{ publicvoidhandleException(){ try { // 模拟出现异常的代码 int result = 10 / 0; } catch (Exception e) { // 记录异常信息,第二个参数传入异常对象会自动打印堆栈 log.error("An error occurred: ", e); } } }

在代码中,我们就通过log.error()来记录发生异常时的堆栈信息。

这样,当问题发生时,我们可以迅速查看到详细的异常信息,帮助我们定位问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/26 9:12:56

零门槛搞定黑苹果!OpCore Simplify让OpenCore配置不再难

零门槛搞定黑苹果&#xff01;OpCore Simplify让OpenCore配置不再难 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想体验macOS系统但被复杂的OpenCo…

作者头像 李华
网站建设 2026/9/1 3:08:21

革新性EFI生成工具:零基础也能秒上手的OpenCore配置神器

革新性EFI生成工具&#xff1a;零基础也能秒上手的OpenCore配置神器 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为OpenCore EFI配置的复杂性而…

作者头像 李华
网站建设 2026/9/2 12:41:41

安达发|守护保健品品质生命线:用APS排程软件驾驭复杂生产,稳!

在保健品行业蓬勃发展的今天&#xff0c;生产管理的高效性和精准性成为了企业竞争的关键因素。而APS排程软件&#xff0c;正逐渐成为这个行业提升生产效率的秘密武器。APS排程软件是什么&#xff1f;APS&#xff0c;即高级计划与排程&#xff08;Advanced Planning and Schedul…

作者头像 李华
网站建设 2026/8/26 17:11:30

桑基图可视化实战指南:从问题分析到完全掌握

桑基图可视化实战指南&#xff1a;从问题分析到完全掌握 【免费下载链接】d3-sankey 项目地址: https://gitcode.com/gh_mirrors/d3/d3-sankey 桑基图作为一种特殊的流程图&#xff0c;通过宽度成比例的线条展示流量或能量的流动关系&#xff0c;能够直观呈现流量大小比…

作者头像 李华
网站建设 2026/8/31 18:54:57

微信聊天记录解密与导出完全指南:从入门到精通

微信聊天记录解密与导出完全指南&#xff1a;从入门到精通 【免费下载链接】PyWxDump 获取微信账号信息(昵称/账号/手机/邮箱/数据库密钥/wxid)&#xff1b;PC微信数据库读取、解密脚本&#xff1b;聊天记录查看工具&#xff1b;聊天记录导出为html(包含语音图片)。支持多账户信…

作者头像 李华
网站建设 2026/8/23 10:47:04

腾讯开源HunyuanVideo-I2V:静态图转视频新工具!

腾讯开源HunyuanVideo-I2V&#xff1a;静态图转视频新工具&#xff01; 【免费下载链接】HunyuanVideo-I2V 腾讯推出的HunyuanVideo-I2V是一款开源的图像转视频生成框架&#xff0c;基于强大的HunyuanVideo技术&#xff0c;能够将静态图像转化为高质量动态视频。该框架采用先进…

作者头像 李华