你真的会打印日志吗?基于 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

将openclaw接入飞书:10分钟,让你的AI员工直接操作你的文档和表格!

将openclaw接入飞书:10分钟,让你的AI员工直接操作你的文档和表格!

上一篇,我们给小龙虾接了 Telegram,实现了手机遥控。 但说实话,Telegram 只解决了"能聊天"的问题。你跟小龙虾说"帮我写个文档",它写完了——然后呢?你还得自己复制粘贴到你的编辑器中。 这就像请了个助手,他只能站在门外隔着门跟你喊话,但不能进屋帮你干活。 今天这篇,我们把门打开。让小龙虾直接进入你的飞书——读文档、写文档、操作表格、管理日程,全部自己来。 先看效果👇 飞书的配置比 Telegram 多一些步骤,但别慌——跟着我走,每一步都有截图,大概10分钟搞定。 飞书的接入分四个阶段,先有个全局概念,不容易迷路: 1. 在飞书上造一个机器人 — 相当于给小龙虾办一张飞书工牌 2. 在服务器上装飞书插件 — 让小龙虾学会"说飞书的语言" 3.

By Ne0inhk

一键拯救大模型的前端审美能力 - 使用Frontend-Design Skill提升AI设计水平

# 一键拯救大模型的前端审美能力 ## 前言 目前,在不额外给风格规范/设计系统/示例参考的情况下,拥有前端审美能力的编程模型只有4款: - Gemini 3 Pro - Gemini 3 Flash   - Claude Opus 4.5 - Claude Sonnet 4.5 当我们看到GPT-5.2-Codex等明明其他方面都很厉害,但是唯独前端审美不行的模型时,常常感叹"哀其不幸、怒其不争"。那么,是否有快速提升他们前端审美能力的方法呢? 答案是:**使用 Anthropic 官方提供的 frontend-design skill** ## 什么是 Frontend-Design Skill? Frontend-Design Skill 是 Anthropic 官方提供的一款技能包,可以为所有主流编程大模型(

By Ne0inhk
别再贴字幕了!Naiz AI:从语义到像素,全链路重构你的“数字孪生”

别再贴字幕了!Naiz AI:从语义到像素,全链路重构你的“数字孪生”

Naiz AI:打破语言边界,正在重新定义“全球视频内容”的表达主权 当传统翻译还在为对齐字幕发愁时,Naiz AI 已经让你的视频在 100 种语言里不仅“说得溜”,还实现了“口型完美同步”:你的声音,在全球任何角落听起来都像母语。 一、一场让内容创作边界消失的“技术海啸” 2026 年,视频创作领域迎来了一场前所未有的范式转移。如果说过去的视频出海是“戴着枷锁起舞”,那么 Naiz AI 的出现就是彻底打碎了那把名为“语言”的锁。 这不是简单的翻译工具,这是一个现象级的全球表达引擎: * 📈 爆发式增长: 仅仅数月,Naiz AI 处理的视频时长已跨越百万小时,将原本昂贵的专业人工配音周期从“周”缩短到了“分钟”。 * 🌟 顶级创作者的共同选择: 无论是追求极致音质的 YouTube 科技博主,还是需要跨国协作的顶级智库,Naiz AI 的

By Ne0inhk

AI 概念大扒皮:从 LLM 到 Agent,一次说清楚

🤖 AI 概念大扒皮:从 LLM 到 Agent,一次说清楚 这些词你认识几个?不管认识多少,今天都给你扒个底朝天。所谓智能体,其实是由所有"不需要智能"的部分拼凑而成的;那些花里胡哨的新概念,大多不过是新瓶装旧酒。 涉及关键词:LLMPromptContextMemoryAgentRAGFunction CallingMCPSkillSub-Agent 💡 先清空大脑 忘掉你已知的一切,跟着故事线走——你会发现这些概念都是从同一个起点,一步步生长出来的。 🧠 第一步:语言模型长大了 一切混乱的起点,是这个古老的东西——语言模型。早期的小模型基本上是个智障,只会简单的文字接龙。但随着参数规模不断膨胀,在某个临界点,它突然"涌现"出了真正的智能。 为了和之前的小模型做区分,我们在前面加了个"大"字: 🆕 词汇① 大语言模型(LLM) LLM

By Ne0inhk