news 2026/5/12 14:11:08

JavaEE进阶:SpringBoot日志

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaEE进阶:SpringBoot日志

1.日志概述

对于日志,相信我们大家都不陌生了,从学习Java到现在,我们都在用System.out.print来打印日志,通过打印日志来定位和发现问题.

随着项目的复杂度的不断提升,我们对打印日志也有了更高的需求,这时候就需要去用一些专门的日志框架.

日志的用途:

1.系统监控

监控现在几乎是一个成熟系统的标配,我们可以通过日志记录这个系统的运行状态,每一个方法的响应时间,响应状态等,对数据进行分析,设置不同的规则,超过阈值时进行报警。

比如统计日志中关键字的数量,并在关键字数量达到一定条件时报警,这也是日志的常见需求之一

2.数据采集

数据采集是一个比较大的范围,采集的数据可以作用在很多方面,比如数据统计,推荐排序等..

数据统计:统计页面的浏览量 (PV), 访客量 (UV), 点击量等,根据这些数据进行数据分析,优化公司运营策略

推荐排序:目前推荐排序应用在各个领域,我们经常接触的各行各业很多也都涉及推荐排序,比如购物,广告,新闻等领域。

数据采集是推荐排序工作中必须做的一环,系统通过日志记录用户的浏览历史,停留时长等,算法人员通过分析这些数据,训练模型,给用户做推荐.

3. 日志审计

随着互联网的发展,众多企业的关键业务越来越多的运行于网络之上.

网络安全越来越受到大家的关注, 系统安全也成为了项目中的一个重要环节, 安全审计也是系统中非常重要的部分.

国家的政策法规、行业标准等都明确对日志审计提出了要求. 通过系统日志分析,可以判断一些非法攻击, 非法调用,以及系统处理过程中的安全隐患.

2.日志使用

SpringBoot项目在启动的时候,就默认有日志输出.

我们通过System.out.print打印的日志比SpringBoot打印的日志少了很多信息.

SpringBoot内置了日志框架slf4j,我们可以直接在程序中调用slf4j来输出日志.

2.1 打印日志

在程序中获取日志对象,需要使用日志工厂LoggerFactory.

private static Logger logger = LoggerFactory.getLogger(LogController.class);

日志对象的打印方法有很多,我们可以先试用info()方法来打印.

@RestController public class LogController { private static Logger logger = LoggerFactory.getLogger(LogController.class); @RequestMapping("/printLog") public String logger(){ logger.info("----------打印日志-----------"); return "日志打印成功"; } }

3.日志格式

1.时间日期:精确到毫秒

2.日志级别:ERROR,WARN,INFO,DEBUG,TRACE

3.进程ID

4.线程名称

5.Logger名(通常使用源代码类名)

6.日志内容

4.日志级别

日志级别从高到低依次为:FATAL,ERROR,WARN,INFO,DEBUG,TRACE

FATAL: 致命信息,表示需要立即被处理的系统级错误。

ERROR: 错误信息,级别较高的错误日志信息,但仍然不影响系统的继续运行。

WARN: 警告信息,不影响使用,但需要注意的问题

INFO: 普通信息,用于记录应用程序正常运行时的一些信息,例如系统启动完成、请求处理完成等。

DEBUG: 调试信息,需要调试时候的关键信息打印。

TRACE: 追踪信息,比 DEBUG 更细粒度的信息事件 (除非有特殊用意,否则请使用 DEBUG 级别替代)

日志级别是开发人员自己设置的,开发人员根据自己的理解来判断该信息的重要程度.

针对不同级别,Logger对象分别提供了对应的方法来输出日志.

@RequestMapping("/printLog1") public String logger1(){ logger.trace("----------trace-----------"); logger.debug("----------debug-----------"); logger.info("----------info-----------"); logger.warn("----------warn-----------"); logger.error("----------error-----------"); return "日志打印成功"; }

运行程序,我们可以发现,只打印了三条日志,trace,debug级别的日志并没有被打印出来.

这个和日志级别的配置有关,日志的输出级别默认是info级别,所以智慧打印大于等于此级别的日志.

5.日志配置

5.1 配置日志级别

日志级别的配置只需要在配置文件中设置logging.level配置项即可.

设置为debug之后再次运行程序.

5.2 日志持久化

以上这些日志都是输出在控制台上的,然而在线上环境中,我们需要把日志保存下来,以便出现问题之后追溯问题,把日志保存下来,就叫日志的持久化.

日志的持久化有两种方式.

1.配置日志文件名

2.配置日志的存储目录.

配置日志文件的路径和文件名:

properties配置:

logging.file.name=logger/springboot.log

yml配置:

logging: file: name: logger/springboot.log

运行程序,就会发现出现了一个新的包,里面记录了日志

配置日志文件的保存路径:

这里注意,这两种日志方式只能选择一种使用.

properties配置:

logging.file.path=D:/springboot/logger

yml配置:

logging: file: path: D:/springboot/logger

配置完成之后运行程序就会出现这个文件夹

5.3 配置日志文件分割

如果我们的日志都放在一个文件中,随着项目的运行,日志文件会越来越大,所以我们需要对日志文件进行分割.

日志框架当然也考虑到了这一点,如果我们不进行配置,默认日志文件超过10M就进行分割,

properties配置:

logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i logging.logback.rollingpolicy.max-file-size=1KB

yml配置:

logging: logback: rollingpolicy: max-file-size: 1KB file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

配置完成,循环打印日志,看看效果.

5.4 配置日志格式

目前日志打印的格式是默认的,打印日志的格式也是支持配置的.支持控制台和日志文件分别设置.

通常情况下,我们使用默认的日志格式打印即可.

6.更简单的日志输出

每次使用LoggerFactory.getLogger(xxx.class)很繁琐,且每个类都添加一遍,lombok给我们提供了一种更简单的方式.使用@slf4j注解添加日志

6.1 添加lombok依赖

6.2 输出日志

在类上添加@slf4j注解.这个注解会给我们提供一个log对象,我们直接使用就可以.

运行程序,就可以打印日志了

7.总结

1.日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题,

Spring Boot 内容了日志框架,默认情况下使用的是 info 日志级别将日志输出到控制台的,我们可以通过lombok 提供的 @Slf4j注解和 log 对象快速的打印自定义日志。

2.日志包含 6 个级别,日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称或保存目录来将日志持久化

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

技能包管理器设计:从概念到原型实现的技术解析

1. 项目概述与核心价值最近在GitHub上闲逛,发现了一个挺有意思的项目,叫skillpm。乍一看这个仓库名musharrafsaroof-123/skillpm,你可能和我最初一样有点懵,这名字组合有点怪。但点进去看,它其实是一个“技能包管理器”…

作者头像 李华
网站建设 2026/5/12 14:06:15

解读 Taotoken 用量看板中的 token 消耗分布与模型调用排行

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 解读 Taotoken 用量看板中的 token 消耗分布与模型调用排行 当你在 Taotoken 平台上管理多个模型 API 的调用时,了解资…

作者头像 李华
网站建设 2026/5/12 14:04:43

IEC61850 建模效率低、易出错?这款可视化建模工具直接解放工程师

在智能变电站、水力发电、分布式能源、风电等 IEC61850 项目实施中,ICD/CID 模型建模一直是痛点:专业门槛高、参数多、关联复杂、人工易出错、调试成本高,一旦模型有误,直接影响设备联调与工程进度。针对这些行业痛点,…

作者头像 李华
网站建设 2026/5/12 14:04:40

ComfyUI-WanVideoWrapper:零基础也能玩转的AI视频魔法师

ComfyUI-WanVideoWrapper:零基础也能玩转的AI视频魔法师 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 你是否曾想过,用一张简单的照片就能创作出引人入胜的动态视频&am…

作者头像 李华
网站建设 2026/5/12 14:03:52

解决ClaudeCode频繁封号与Token不足的稳定替代方案

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 解决ClaudeCode频繁封号与Token不足的稳定替代方案 对于依赖Claude Code进行编程辅助的开发者而言,服务中断或额度限制…

作者头像 李华
网站建设 2026/5/12 14:03:37

深度解析SubtitleOCR:如何通过智能区域检测实现10倍速硬字幕提取

深度解析SubtitleOCR:如何通过智能区域检测实现10倍速硬字幕提取 【免费下载链接】SubtitleOCR 快如闪电的硬字幕提取工具。仅需苹果M1芯片或英伟达3060显卡即可达到10倍速提取。A very fast tool for video hardcode subtitle extraction 项目地址: https://gitc…

作者头像 李华