当前位置: 首页 > news >正文

【Java EE】Spring 日志详解

文章目录

  • 一、日志的作用
  • 二、SpringBoot日志底层架构
  • 三、两种打印日志方式
    • 3.1 原生SLF4J
    • 3.2 Lombok @Slf4j
  • 四、日志级别
  • 五、application全局配置
    • 5.1 配置日志级别
      • yml配置
      • properties配置
    • 5.2 日志持久化
    • 5.3 日志自动分割
    • 5.4 自定义日志输出格式
  • 六、完整yml配置

一、日志的作用

  1. 线上问题定位排查:程序崩溃、接口报错、请求超时,需要依靠日志复现定位,是开发排障第一工具。
  2. 系统运行监控:记录接口响应耗时、调用频次、异常数量,对接监控平台设置阈值告警。
  3. 业务数据采集分析:日志记录用户浏览、点击、停留行为,统计PV/UV,给推荐算法提供原始数据,支撑运营策略优化。
  4. 安全操作审计:记录用户/管理员增删改查操作、敏感信息查询记录。出现数据泄露、恶意删改时,可通过日志追溯操作人、操作时间,满足等保、行业监管规范。

二、SpringBoot日志底层架构

门面模式:是一种设计模式,也称为外观模式,提供了一个统一的接口,用来访问子系统的一群接口

门面模式主要包含两种角色:

  • 外观角色(Facade):也称为门面角色,是系统对外的统一接口
  • 子系统角色(SubSystem):可以同时有一个或多个SubSystem,对于子系统来说Facade只是一个客户端,即Facade对SubSystem透明

日志框架:

这种日志框架就是门面模式的典型体现,SLF4J不是真正的日志实现,而是一个抽象层,对日志框架制定的一种标准,这样业务代码不用对接底层日志实现,只对接SLF4J门面。

  • 业务代码只依赖SLF4J统一API;
  • 底层可自由切换Logback/Log4j2,无需改动业务代码;
  • 项目所有第三方组件统一使用一套日志配置。

三、两种打印日志方式

3.1 原生SLF4J

importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassLoggerController{// 绑定当前类,日志输出会携带类名,方便定位privatestaticfinalLoggerlogger=LoggerFactory.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("模拟异常报错");return"lombok日志输出";}}

注解封装了创建log的过程

四、日志级别

FATAL > ERROR > WARN > INFO > DEBUG > TRACE

  • 级别越高,输出日志越少;配置基础级别后,只会打印当前级别及更高优先级日志
  • Logback无FATAL,自动映射为ERROR。
级别使用场景
FATAL系统致命故障,服务不可用,需管理员紧急处理
ERROR程序报错、异常,不阻断整体服务运行
WARN潜在风险,不影响业务,但需要关注
INFO正常业务流程、启动、请求记录(SpringBoot默认级别)
DEBUG开发调试细节,生产环境关闭
TRACE超细粒度追踪,极少使用(除非特殊用意,一般使用DEBUG代替)

SpringBoot默认日志级别INFO,访问接口只会打印INFO/WARN/ERROR,DEBUG、TRACE不会输出。

五、application全局配置

5.1 配置日志级别

yml配置

  • logging.level.root中可以设置全局的日志级别,表示在显示这个级别及以上的日志信息;
  • 与root同级别可以指定某个目录日志级别
logging:level:root:debug# 全局根级别,所有包生效com.example.demo:trace# 指定业务包打印TRACE日志

properties配置

logging.level.root=debug logging.level.com.example.demo=trace

5.2 日志持久化

控制台中的日志重启就会丢失,要想持久化的保存日志有两种配置方式:

  1. 指定完整文件名(优先级更高)
logging:file:name:logs/demo.log# 相对路径,项目根目录logs文件夹
  1. 指定存储目录
logging:file:path:D:/server/logs# 绝对路径

内容都会被识别为路径,文件名为spring.log

注意

  1. 即使服务器重启,这个文件也不会丢失,新日志会追加在之前的日志后面
  2. namepath同时配置,仅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%n'

Spring启动时有默认的日志输出:

六、完整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%wEx'file:'%d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%t] %-40.40logger{39} : %m%n%wEx'
http://www.jsqmd.com/news/1244598/

相关文章:

  • AI Agent开发指南:从基础认知到实战应用
  • 江西实木门楼厂核心工艺解析及本地项目落地实用指南 - 品牌优推
  • 2026年TGS高效双吸泵怎么安装及配套服务商选择指南 - 热点品牌推荐
  • 2026年云南开餐饮店选烹饪设备供应商哪家靠谱攻略 - 热点品牌推荐
  • 2026山东综评培训机构哪家好 选报参考维度全梳理 - 起跑123
  • DolphinX 实测:当 AI Agent 真正读懂你的时序数据,事情开始变得不一样
  • 含多类型V2G电动汽车的微网日前-日内两阶段协同优化调度模型研究(Matlab代码实现)
  • 劳力士服务项目及价格查询|维修地址与售后服务电话权威信息通知(2026年7月最新) - 劳力士服务中心
  • 鸿蒙 ArkTS 入门实战:校园午餐均衡记录的首屏状态与点击反馈
  • 鸿蒙 ArkTS 入门实战:清洁分区计时器的页面入口与状态切换
  • 鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
  • LightGlue:基于Transformer的高效特征匹配技术解析
  • 2026年四川大模型算法备案代办优质公司挑选指南 - 热点品牌推荐
  • 高企复审与首次申报有何不同?如何复审?
  • 哈尔滨亨得利手表维修地址及售后保养服务权威公示(2026年7月最新) - 亨得利官方博客
  • 河南耐用的去鱼鳞一体机源头厂家选购实用指南 - 品牌优推
  • 云南商用厨具供应商联系方式获取及实用选购参考 - 热点品牌推荐
  • 江诗丹顿服务项目及价格查询|全部地址与客服热线权威信息通知(2026年7月最新) - 江诗丹顿服务中心
  • Kafka与Zookeeper集群部署实战指南
  • 宝时信平台推荐码0000001 | 宽带代理轻创业首选,单宽/融宽/企宽项目推广全攻略+避坑指南 - 流量卡代理招商(直招)
  • 2026年宁夏周边家庭园林景观设计服务团队推荐哪家 - 热点品牌推荐
  • # 2026常州遗产继承纠纷找什么律师 陈志豪律师15年经验全解析 - 本地品牌推荐
  • 意识与物质:虚实宇宙的终极负相关律
  • 指挥中心控制台厂家选不对有多坑?华南 2026 年头工厂实力深度对比
  • 2026年塑料交通隔离墩吹塑机厂口碑选购实用指南 - 热点品牌推荐
  • 2026年吨桶IBC吹塑机选品参考及联系方式整理 - 热点品牌推荐
  • Java 继承②
  • 企业为什么要做双软评估?有哪些好处?
  • 2026年7月最新浪琴佛山桂城万达广场维修保养服务电话 - 浪琴官方售后服务中心
  • 亲身到店探访上海亨得利名表服务中心|最新地址及客服热线(2026年7月更新) - 亨得利官方