你真的会打印日志吗?基于 Spring Boot 的全方位日志指南

你真的会打印日志吗?基于 Spring Boot 的全方位日志指南
—JavaEE专栏—

目录

一、日志概述:为什么它比 System.out.println 更重要?

在 Java 开发早期,我们习惯使用 System.out.println() 来调试代码 。但随着项目复杂度提升,简单的打印语句已无法满足生产环境的需求 。

1.1 日志的核心用途

  • 系统监控:记录系统运行状态、方法响应时间及状态,设置阈值报警 。
  • 数据采集:统计 PV/UV、用户留存,为推荐算法提供原始数据 。
  • 日志审计:记录用户操作记录,追踪非法攻击或信息泄露(如谁删除了关键数据) 。

1.2 为什么弃用标准输出?

通过 System.out.print 打印的日志相比 Spring Boot 默认日志缺少了时间戳、日志级别、进程 ID、线程名等关键排查信息。


二、日志框架体系:门面模式的深度解析

Spring Boot 默认集成了 SLF4J 作为日志门面,并使用 Logback 作为具体实现。

2.1 门面模式 (Facade Pattern)

SLF4J 是门面模式的典型应用 。它为子系统(如 Log4j、JUL、Logback)提供统一接口,使得客户端无需关心底层实现。

  • 优点:减少系统依赖,提高灵活性,简化客户端使用难度。

2.2 常见框架对比

角色框架名称说明
日志门面SLF4J, commons-logging统一 API 接口,不含逻辑实现
日志实现Logback, Log4j 1/2, JUL负责具体的日志记录逻辑

|


三、实战:Spring Boot 日志的基本使用

3.1 传统方式获取日志对象

需要使用 LoggerFactory 获取,并指定当前类的 Class 对象 。

importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassLoggerController{// 注意:Logger 对象必须属于 org.slf4j 包 privatestaticfinalLogger logger =LoggerFactory.getLogger(LoggerController.class);publicStringlogTest(){ logger.info("这是一条 INFO 级别的日志");return"Log Success";}}

千万不要导错包!!!

在这里插入图片描述

3.2 进阶方式:使用 Lombok (@Slf4j)

引入 Lombok 依赖后,只需一个注解即可自动生成 log 对象。

importlombok.extern.slf4j.Slf4j;importorg.springframework.web.bind.annotation.RestController;@Slf4j// 自动提供 log 对象@RestControllerpublicclassLogController{publicvoidlog(){ log.info("使用 Lombok 快速打印日志");}}

四、深入理解日志级别

日志级别按严重程度从高到低排列为:FATAL > ERROR > WARN > INFO > DEBUG > TRACE

  • ERROR:记录较高等级的错误,但不影响系统运行 。
  • WARN:警告信息,需引起注意 。
  • INFO:默认级别,记录系统运行的关键节点。
  • DEBUG:调试阶段的关键信息 。
注意:Spring Boot 默认级别为 INFO,因此默认情况下不会打印 DEBUGTRACE 级别的日志 。

五、日志的高级配置 (application.yml)

5.1 修改日志级别

logging:level:root: debug # 将全局日志级别设为 debug [cite: 39]

5.2 日志持久化

在线上环境中,必须将日志保存到文件。

logging:file:name: logger/springboot.log # 指定文件名(推荐使用) path: D:/temp # 仅指定目录,文件名为默认的 spring.log 

5.3 日志文件分割

为防止单个日志文件过大(默认超过 10MB 分割),可进行如下配置:

logging:logback:rollingpolicy:max-file-size: 1KB # 达到 1KB 自动分割(实际生产常用 200MB)file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i # 分割后的命名格式

六、自定义日志格式说明

通过 logging.pattern.consolelogging.pattern.file 可以自定义输出格式。

占位符说明
%d日期和时间(精确到毫秒)
%5p日志级别
%c类的全限定名
%m日志消息内容

七、总结

  1. 日志的重要性:它是程序运行的“黑匣子”,是定位问题、审计安全、分析数据的核心依据 。
  2. 最佳实践:推荐使用 Lombok 的 @Slf4j 注解,并通过 YAML 配置文件实现日志的级别控制、持久化及滚动拆分。

参考链接:

Read more

全球首个可追溯!中国DeepRare登《自然》:罕见病AI医生准确率碾压国际

全球首个可追溯!中国DeepRare登《自然》:罕见病AI医生准确率碾压国际

一、里程碑时刻:中国AI破解罕见病诊断世界性难题 2026年2月19日,国际顶刊《自然》(Nature)在线刊发中国科研团队重磅成果——全球首个“推理过程可追溯”的罕见病AI医生DeepRare。这款由上海交通大学联合新华医院团队研发的智能系统,以57.18%的表型诊断首位准确率,将国际最优模型的33.39%远远甩在身后,领先幅度达23.79个百分点(近24个百分点),彻底改写罕见病诊断“黑箱”困境。 更值得骄傲的是,DeepRare并非停留在实验室的理论成果:自2025年7月26日上线在线诊断平台以来,半年内已吸引超1000名专业用户注册,覆盖全球600多家医疗科研机构,从国内三甲医院到欧美的顶尖实验室,均将其作为罕见病诊疗的“智能听诊器”。在上海新华医院,它已化身“数字质控员”进入内测阶段,即将正式嵌入全院罕见病诊疗流程,为每一次诊断筑牢“安全底线”——这标志着中国医工交叉创新不仅实现技术领跑,更成功跑通了“在线平台、院内质控、产业赋能”三位一体的转化路径,完成从科研到临床的闭环落地。 二、技术拆解:三大核心突破,让AI诊断“

By Ne0inhk
【征文计划】基于Rokid 眼镜 的AI天气应用+GPS定位+AI旅游规划

【征文计划】基于Rokid 眼镜 的AI天气应用+GPS定位+AI旅游规划

文章目录 * 本文选用的技术包括: * 一、主要流程 * 新增三个辅助类,原有文件做对应改造: * 二、功能 A:GPS 自动定位 * 2.1 实现路径 * 2.2 核心代码:LocationHelper.kt * 2.3 意图识别:我们添加 GPS 的关键词 * 三、功能 B:对话上下文工程 * 3.1 核心数据结构 * 3.2 续播意图的两种形态 * 四、功能 C:AI 旅游规划 * 4.1 为什么用 LLM, 而不是规则 * 4.2 核心代码:AiTravelPlanHelper.kt

By Ne0inhk
LLM - Claude Code × OpenClaw:构建“左脑工程 + 右脑代理”的下一代 AI 开发工作流

LLM - Claude Code × OpenClaw:构建“左脑工程 + 右脑代理”的下一代 AI 开发工作流

文章目录 * 一、主题与读者定位 * 二、AI 助手的分化:从“一个模型”到“两个角色” * 三、Claude Code:工程化 Coding Agent 的典型形态 * 1)设计哲学:工程优先、可预测、深度聚焦 * 2)典型工作方式 * 3)记忆机制:项目级,而非人格级 * 4)应用示例 * 示例:微服务重构 * 四、OpenClaw:长期运行的个人 AI 代理 * 1)设计理念:持续在线 + 跨平台整合 * 2)关键能力:长期记忆 * 3)主动性:AI 开始“自己做事” * 4)

By Ne0inhk

AI如何自动生成一线与二线产区标准图

快速体验 1. 打开 InsCode(快马)平台 https://www.inscode.net 2. 输入框内输入如下内容: 开发一个AI工具,能够根据输入的地理数据自动生成一线产区和二线产区的标准图。功能包括:1. 数据采集模块,支持导入行政区划、经济指标等数据;2. 分类算法,根据GDP、人口密度等指标自动划分一线和二线产区;3. 可视化模块,生成标准地图并支持交互式查看。使用Python和GeoPandas库实现数据分析和地图绘制,前端使用Leaflet.js展示。 1. 点击'项目生成'按钮,等待项目生成完整后预览效果 AI如何自动生成一线与二线产区标准图 最近在做一个地理信息相关的项目,需要根据经济指标自动划分一线和二线产区,并生成标准地图。经过一番摸索,发现用AI辅助开发可以大大提升效率。下面分享我的实现思路和具体步骤。 数据采集模块 1. 首先需要收集基础地理数据,包括行政区划边界、GDP总量、人均GDP、人口密度等关键指标。

By Ne0inhk