【Java EE】Spring 日志详解

发布时间:2026/9/11 20:40:25

【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
延伸阅读

更多相关文章

2026/9/11 20:40:09

鸿蒙 ArkTS 入门实战:清洁分区计时器的页面入口与状态切换

鸿蒙 ArkTS 入门实战:清洁分区计时器的页面入口与状态切换 前言 清洁分区计时器是一个基于 ArkTS 与 ArkUI 声明式 UI 的鸿蒙示例项目,入口页面位于 entry/src/main/ets/pages/Index.ets。 本文围绕项目当前代码展开,结合 清洁分区计时 场景…

2026/9/9 14:51:56

从零吃透XML映射文件|零基础入门完整学习指南(附实操案例)

哈喽大家好!今天给大家带来一篇纯零基础、保姆级的 XML 映射文件学习教程。很多初学开发的小伙伴,都会被 MyBatis、框架配置中的 XML 映射文件搞懵:标签看不懂、语法不会写、报错找不到原因。其实 XML 映射文件没有想象中复杂,它的…

2026/9/11 20:38:32

不写代码配置化方案:合并单元格与导出打印一键搞定

复杂列表页的合并单元格和导出打印,应该是很多做后台管理系统、报表系统还有运营管理平台的团队,都会撞上的一堵墙。需求方永远会说“就一个页面、导个Excel,很简单的”,但等你真打开那个页面,看到几十列的行列合并、跨…

2026/9/11 20:33:31

YOLOv8工业级钻井设备检测:强光锈蚀油污下的鲁棒识别方案

简介:本资源是一套面向计算机、人工智能及自动化等相关专业学生的毕业设计级项目,聚焦石油钻井平台关键设备的智能状态监测,基于YOLOv8实现高精度目标检测与可视化分析。项目开箱即用,涵盖完整训练流程、部署方案与交互式界面&…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码