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

JavaEE进阶:SpringBoot日志

1.日志概述

对于日志,相信我们大家都不陌生了,从学习Java到现在,我们都在用System.out.print来打印日志,通过打印日志来定位和发现问题.

随着项目的复杂度的不断提升,我们对打印日志也有了更高的需求,这时候就需要去用一些专门的日志框架.

日志的用途:

1.系统监控

监控现在几乎是一个成熟系统的标配,我们可以通过日志记录这个系统的运行状态,每一个方法的响应时间,响应状态等,对数据进行分析,设置不同的规则,超过阈值时进行报警。

比如统计日志中关键字的数量,并在关键字数量达到一定条件时报警,这也是日志的常见需求之一

2.数据采集

数据采集是一个比较大的范围,采集的数据可以作用在很多方面,比如数据统计,推荐排序等..

数据统计:统计页面的浏览量 (PV), 访客量 (UV), 点击量等,根据这些数据进行数据分析,优化公司运营策略

推荐排序:目前推荐排序应用在各个领域,我们经常接触的各行各业很多也都涉及推荐排序,比如购物,广告,新闻等领域。

数据采集是推荐排序工作中必须做的一环,系统通过日志记录用户的浏览历史,停留时长等,算法人员通过分析这些数据,训练模型,给用户做推荐.

3. 日志审计

随着互联网的发展,众多企业的关键业务越来越多的运行于网络之上.

网络安全越来越受到大家的关注, 系统安全也成为了项目中的一个重要环节, 安全审计也是系统中非常重要的部分.

国家的政策法规、行业标准等都明确对日志审计提出了要求. 通过系统日志分析,可以判断一些非法攻击, 非法调用,以及系统处理过程中的安全隐患.

2.日志使用

SpringBoot项目在启动的时候,就默认有日志输出.

我们通过System.out.print打印的日志比SpringBoot打印的日志少了很多信息.

SpringBoot内置了日志框架slf4j,我们可以直接在程序中调用slf4j来输出日志.

2.1 打印日志

在程序中获取日志对象,需要使用日志工厂LoggerFactory.

private static Logger logger = LoggerFactory.getLogger(LogController.class);

日志对象的打印方法有很多,我们可以先试用info()方法来打印.

@RestController public class LogController { private static Logger logger = LoggerFactory.getLogger(LogController.class); @RequestMapping("/printLog") public String logger(){ logger.info("----------打印日志-----------"); return "日志打印成功"; } }

3.日志格式

1.时间日期:精确到毫秒

2.日志级别:ERROR,WARN,INFO,DEBUG,TRACE

3.进程ID

4.线程名称

5.Logger名(通常使用源代码类名)

6.日志内容

4.日志级别

日志级别从高到低依次为:FATAL,ERROR,WARN,INFO,DEBUG,TRACE

FATAL: 致命信息,表示需要立即被处理的系统级错误。

ERROR: 错误信息,级别较高的错误日志信息,但仍然不影响系统的继续运行。

WARN: 警告信息,不影响使用,但需要注意的问题

INFO: 普通信息,用于记录应用程序正常运行时的一些信息,例如系统启动完成、请求处理完成等。

DEBUG: 调试信息,需要调试时候的关键信息打印。

TRACE: 追踪信息,比 DEBUG 更细粒度的信息事件 (除非有特殊用意,否则请使用 DEBUG 级别替代)

日志级别是开发人员自己设置的,开发人员根据自己的理解来判断该信息的重要程度.

针对不同级别,Logger对象分别提供了对应的方法来输出日志.

@RequestMapping("/printLog1") public String logger1(){ logger.trace("----------trace-----------"); logger.debug("----------debug-----------"); logger.info("----------info-----------"); logger.warn("----------warn-----------"); logger.error("----------error-----------"); return "日志打印成功"; }

运行程序,我们可以发现,只打印了三条日志,trace,debug级别的日志并没有被打印出来.

这个和日志级别的配置有关,日志的输出级别默认是info级别,所以智慧打印大于等于此级别的日志.

5.日志配置

5.1 配置日志级别

日志级别的配置只需要在配置文件中设置logging.level配置项即可.

设置为debug之后再次运行程序.

5.2 日志持久化

以上这些日志都是输出在控制台上的,然而在线上环境中,我们需要把日志保存下来,以便出现问题之后追溯问题,把日志保存下来,就叫日志的持久化.

日志的持久化有两种方式.

1.配置日志文件名

2.配置日志的存储目录.

配置日志文件的路径和文件名:

properties配置:

logging.file.name=logger/springboot.log

yml配置:

logging: file: name: logger/springboot.log

运行程序,就会发现出现了一个新的包,里面记录了日志

配置日志文件的保存路径:

这里注意,这两种日志方式只能选择一种使用.

properties配置:

logging.file.path=D:/springboot/logger

yml配置:

logging: file: path: D:/springboot/logger

配置完成之后运行程序就会出现这个文件夹

5.3 配置日志文件分割

如果我们的日志都放在一个文件中,随着项目的运行,日志文件会越来越大,所以我们需要对日志文件进行分割.

日志框架当然也考虑到了这一点,如果我们不进行配置,默认日志文件超过10M就进行分割,

properties配置:

logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i logging.logback.rollingpolicy.max-file-size=1KB

yml配置:

logging: logback: rollingpolicy: max-file-size: 1KB file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

配置完成,循环打印日志,看看效果.

5.4 配置日志格式

目前日志打印的格式是默认的,打印日志的格式也是支持配置的.支持控制台和日志文件分别设置.

通常情况下,我们使用默认的日志格式打印即可.

6.更简单的日志输出

每次使用LoggerFactory.getLogger(xxx.class)很繁琐,且每个类都添加一遍,lombok给我们提供了一种更简单的方式.使用@slf4j注解添加日志

6.1 添加lombok依赖

6.2 输出日志

在类上添加@slf4j注解.这个注解会给我们提供一个log对象,我们直接使用就可以.

运行程序,就可以打印日志了

7.总结

1.日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题,

Spring Boot 内容了日志框架,默认情况下使用的是 info 日志级别将日志输出到控制台的,我们可以通过lombok 提供的 @Slf4j注解和 log 对象快速的打印自定义日志。

2.日志包含 6 个级别,日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称或保存目录来将日志持久化

http://www.jsqmd.com/news/802665/

相关文章:

  • 掌握高效窗口管理:专业级分辨率调整工具完全指南
  • 2026年4月有实力的挠性联轴器公司口碑推荐,球齿/挠性联轴器/球齿联轴器/联轴器/齿式联轴器,挠性联轴器实力厂家选哪家 - 品牌推荐师
  • 最强文档下载工具kill-doc:让你轻松获取免费文档资源的完整指南
  • 2026年贵阳全屋整装一站式方案深度横评:透明报价与闭口合同如何破局预算黑洞 - 精选优质企业推荐官
  • 别再手动敲命令了!用Docker Compose一键部署带密码的Elasticsearch 7.14.1
  • 2026年贵阳全屋整装与清镇别墅定制:从预算黑洞到透明决算的高端选购避坑指南 - 精选优质企业推荐官
  • 2026年贵阳全屋整装从预算黑洞到透明决算的一站式家装完全指南 - 精选优质企业推荐官
  • 2026年机油厂家推荐排行榜:全合成/半合成、汽/柴/摩专用,抗磨耐高温原厂配套机油优质之选! - 速递信息
  • 技术预测与颠覆性创新:工程师如何识别趋势并构建应对机制
  • AArch64内存对齐与原子性访问原理详解
  • OrCAD 24.1 跨页搜索网络/元件的正确方法
  • 四川本土消防服务机构综合排行:欣安建筑位居首位 - 优质品牌商家
  • RevokeMsgPatcher终极指南:三步搞定微信QQ防撤回,告别消息消失烦恼
  • 别再写错地址了!STM32 UID读取避坑指南(以STM32L051为例,含HAL库函数详解)
  • 智能记忆管理系统MemoryPilot:基于RAG架构解决LLM上下文限制
  • Hermes Agent 如何自定义配置接入 Taotoken 平台
  • 2026年贵阳全屋整装一站式方案深度横评:从预算黑洞到透明决算的家装指南 - 精选优质企业推荐官
  • 东南亚海外仓库存盘点不准确怎么办?库存盘点流程优化方案分享! - 跨境小媛
  • 5款专业VLC皮肤:如何快速美化你的播放器界面
  • 贵州正规美甲培训学校排行 实地测评结果公示 - 奔跑123
  • 量子优化算法QAOA在约束组合问题中的应用与改进
  • Cyberpunk 2077存档编辑器:免费开源工具,轻松修改游戏存档数据
  • 基于74LS190与Multisim的智能交通灯仿真:从倒计时核心到夜间模式实现
  • Claude Code配置切换器:一键管理多AI服务环境变量
  • 油痘肌去痘印泥膜推荐 12天告别顽固痘印,亲测超管用 - 全网最美
  • 别再花钱买新的了!闲置J-LINK V9固件修复与SN号、License激活全攻略
  • 2026年贵阳全屋整装与旧房翻新市场深度横评:从预算黑洞到透明一站式的靠谱选择 - 精选优质企业推荐官
  • 什麼是Browser API?
  • 2026年GEO优化系统横评:快米兔GEO、朗科GEO、拓普GEO,数据监测与迭代优化能力对比 - 速递信息
  • 前端实战:用HTML/CSS/JS打造交互式生日蛋糕网页应用