【Java EE】Spring 日志详解
文章目录一、日志的作用二、SpringBoot日志底层架构三、两种打印日志方式3.1 原生SLF4J3.2 Lombok Slf4j四、日志级别五、application全局配置5.1 配置日志级别yml配置properties配置5.2 日志持久化5.3 日志自动分割5.4 自定义日志输出格式六、完整yml配置一、日志的作用线上问题定位排查程序崩溃、接口报错、请求超时需要依靠日志复现定位是开发排障第一工具。系统运行监控记录接口响应耗时、调用频次、异常数量对接监控平台设置阈值告警。业务数据采集分析日志记录用户浏览、点击、停留行为统计PV/UV给推荐算法提供原始数据支撑运营策略优化。安全操作审计记录用户/管理员增删改查操作、敏感信息查询记录。出现数据泄露、恶意删改时可通过日志追溯操作人、操作时间满足等保、行业监管规范。二、SpringBoot日志底层架构门面模式是一种设计模式也称为外观模式提供了一个统一的接口用来访问子系统的一群接口门面模式主要包含两种角色外观角色(Facade)也称为门面角色是系统对外的统一接口子系统角色SubSystem可以同时有一个或多个SubSystem对于子系统来说Facade只是一个客户端即Facade对SubSystem透明日志框架这种日志框架就是门面模式的典型体现SLF4J不是真正的日志实现而是一个抽象层对日志框架制定的一种标准这样业务代码不用对接底层日志实现只对接SLF4J门面。业务代码只依赖SLF4J统一API底层可自由切换Logback/Log4j2无需改动业务代码项目所有第三方组件统一使用一套日志配置。三、两种打印日志方式3.1 原生SLF4Jimportorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;RestControllerpublicclassLoggerController{// 绑定当前类日志输出会携带类名方便定位privatestaticfinalLoggerloggerLoggerFactory.getLogger(LoggerController.class);GetMapping(/print)publicStringprintLog(){// 不同级别日志输出logger.trace(追踪日志);logger.debug(调试日志);logger.info(正常业务日志);logger.warn(警告日志);logger.error(错误日志);return日志打印完成;}}3.2 Lombok Slf4j每次手动创建Logger对象重复繁琐Lombok一键生成日志对象log。importlombok.extern.slf4j.Slf4j;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;Slf4j// 自动生成 Logger log 对象RestControllerpublicclassLogController{GetMapping(/log)publicStringtestLog(){log.info(用户访问日志接口);log.error(模拟异常报错);returnlombok日志输出;}}注解封装了创建log的过程四、日志级别FATAL ERROR WARN INFO DEBUG TRACE级别越高输出日志越少配置基础级别后只会打印当前级别及更高优先级日志。Logback无FATAL自动映射为ERROR。级别使用场景FATAL系统致命故障服务不可用需管理员紧急处理ERROR程序报错、异常不阻断整体服务运行WARN潜在风险不影响业务但需要关注INFO正常业务流程、启动、请求记录SpringBoot默认级别DEBUG开发调试细节生产环境关闭TRACE超细粒度追踪极少使用除非特殊用意一般使用DEBUG代替SpringBoot默认日志级别INFO访问接口只会打印INFO/WARN/ERRORDEBUG、TRACE不会输出。五、application全局配置5.1 配置日志级别yml配置在logging.level.root中可以设置全局的日志级别表示在显示这个级别及以上的日志信息与root同级别可以指定某个目录日志级别logging:level:root:debug# 全局根级别所有包生效com.example.demo:trace# 指定业务包打印TRACE日志properties配置logging.level.rootdebug logging.level.com.example.demotrace5.2 日志持久化控制台中的日志重启就会丢失要想持久化的保存日志有两种配置方式指定完整文件名优先级更高logging:file:name:logs/demo.log# 相对路径项目根目录logs文件夹指定存储目录logging:file:path:D:/server/logs# 绝对路径内容都会被识别为路径文件名为spring.log注意即使服务器重启这个文件也不会丢失新日志会追加在之前的日志后面name和path同时配置仅name生效。5.3 日志自动分割日志文件持续写入会膨胀为了防止防止单文件超大SpringBoot默认10MB自动分割。可自定义阈值、归档格式logging:logback:rollingpolicy:max-file-size:200MB# 单文件最大容量企业常用200~500Mfile-name-pattern:${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz# 分割后文件名demo.log.2026-07-21.0.gz%d{yyyy-MM-dd}按日期归档%i同一天多文件自增索引.gz自动压缩历史日志节省磁盘5.4 自定义日志输出格式日志内置字段%d{yyyy-MM-dd HH:mm:ss.SSS}精确毫秒时间%5p日志级别%t线程名%logger{39}打印类名%m日志内容%n换行自定义控制台和文件logging:pattern:# 控制台彩色日志console:%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr([%t]){cyan} %-40logger : %m%n# 文件无彩色格式file:%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] %-40logger : %m%nSpring启动时有默认的日志输出六、完整yml配置logging:# 日志文件存储file:name:logs/demo-service.log# 日志级别控制level:root:infocom.example.demo:debugorg.springframework:warnorg.mybatis:warn# 日志滚动分割策略logback:rollingpolicy:max-file-size:200MBfile-name-pattern:${LOG_FILE}.%d{yyyy-MM-dd}.%i.gzmax-history:30# 保留30天历史日志# 自定义日志格式pattern:console:%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr([%15.15t]){cyan} %-40.40logger{39} : %m%n%wExfile:%d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%t] %-40.40logger{39} : %m%n%wEx

相关新闻

从脚本到系统:构建生产级AI应用的工程素养

从脚本到系统:构建生产级AI应用的工程素养

引言:AI开发的"成人礼" 2022年底ChatGPT横空出世时,无数开发者体验过这样的快感:输入一段Prompt,AI瞬间生成一个能跑起来的Demo,效果惊艳到让人感觉"超级智能助手"触手可及。但当我们试图把这个De…

2026/10/15 17:19:18 阅读更多 →
第25章:Mongo分片集群入门——数据太大时怎么水平扩展

第25章:Mongo分片集群入门——数据太大时怎么水平扩展

1. 项目背景 业务场景:本地生活电商上线 18 个月,订单表突破 500GB、日均写入 200 万条。复制集虽然保证了高可用,但单台服务器的磁盘和 IOPS 已经到达物理上限——磁盘使用率 92%、写 IOPS 逼近极限、高峰期 CPU 100%。运维升级服务器配置&…

2026/10/8 1:58:15 阅读更多 →
别再盲目接单了!用波特五力模型重估你的AI副业定位——90%的人根本没看清替代品威胁指数已飙升至6.8

别再盲目接单了!用波特五力模型重估你的AI副业定位——90%的人根本没看清替代品威胁指数已飙升至6.8

更多请点击: https://kaifayun.com 第一章:别再盲目接单了!用波特五力模型重估你的AI副业定位——90%的人根本没看清替代品威胁指数已飙升至6.8 当ChatGPT-4o、Claude 3.5和通义千问Qwen2.5以零成本API调用涌入市场,你还在靠“写…

2026/10/5 20:01:48 阅读更多 →

最新新闻

涡格法计算气动力MATLAB:从机翼升力线算错说起

涡格法计算气动力MATLAB:从机翼升力线算错说起

简介:这份资源面向航空航天、流体力学方向的学生与工程师,提供涡格法(VLM)在MATLAB环境下的气动计算实现方案,可用于翼型、机翼及飞行器的亚声速气动特性分析。涡格法将流场离散为若干涡元素,通过求解欧拉方…

2026/10/15 17:19:29 阅读更多 →
风控挖掘实战:从业务日志到黑灰产团伙识别的完整链路

风控挖掘实战:从业务日志到黑灰产团伙识别的完整链路

做风控这行,天天要面对的问题就是:怎么从动辄几亿条的业务数据里,把黑灰产那条线给拽出来。难点从来不是数据量,而是信号。黑产混在真实用户里,伪装得越来越像正常人,甚至会用真人的账号、真人的设备、真人…

2026/10/15 17:19:29 阅读更多 →
puppeteer-extra-plugin-stealth 实战指南:以插件化方式为 Puppeteer 与 Playwright 构建反检测能力

puppeteer-extra-plugin-stealth 实战指南:以插件化方式为 Puppeteer 与 Playwright 构建反检测能力

网页爬虫浏览器控制测试 【免费下载链接】puppeteer-extra 💯 Teach puppeteer new tricks through plugins. 项目地址: https://gitcode.com/gh_mirrors/pu/puppeteer-extra 点击查看 免费下载 puppeteer-extra-plugin-stealth 是 puppeteer-extra 生态…

2026/10/15 17:19:29 阅读更多 →
传球游戏从混乱到高效:一套可复用的团队协作活动设计方法

传球游戏从混乱到高效:一套可复用的团队协作活动设计方法

“传球游戏”看起来平平无奇,但只要组织过一次就会发现,越简单的游戏越容易翻车。有人站着不动,有人抱着球不放,有人传错了方向,十几个人围成一圈结果球在地上滚了五分钟。我见过太多次这样的场景,后来干脆…

2026/10/15 17:19:29 阅读更多 →
Qt背景色设置全解析:QSS、QPalette与paintEvent的优先级与实战避坑

Qt背景色设置全解析:QSS、QPalette与paintEvent的优先级与实战避坑

接了一个维护项目,需求听着特别简单:把右侧设置面板的背景改成浅灰色,再给标题文字换个颜色。我当时心想这有什么难的,QWidget 上写一句setStyleSheet("background-color: #F5F6FA")不就完事了吗。结果一跑起来&#xf…

2026/10/15 17:19:29 阅读更多 →
MATLAB常用信号处理函数清单:从FFT到滤波器实战指南

MATLAB常用信号处理函数清单:从FFT到滤波器实战指南

1. 项目概述:为什么要单独整理一份信号处理函数清单做信号处理这几年,我最大的感受就是:MATLAB的功能强大到让人眼花缭乱,但真正高频使用的函数翻来覆去就那么几十个。很多初学者最容易犯的毛病,是一上来就抱着几百页的…

2026/10/15 17:18:28 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →