Spring Boot日志

2023-11-13

目录

1.日志的作用

2.自定义打印日志

3.日志级别

4.日志持久化

5.使用lombok输出日志


1.日志的作用

日志是程序的重要组成部分,其实我们几乎无时无刻都在接触日志。简单的说它其实就是程序运行过程中产生的信息。它的主要作用就是帮助程序猿根据日志信息去定位错误并把它修复。试想如果没有日志信息,那么我们只能凭借自己的经验去修复bug,这无疑是非常低效的。

比如当我们启动SpringBoot时,控制台打印的信息就是日志

 除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:

记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。

记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。

记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。

2.自定义日志打印 

2.1 实现步骤

1.获得日志对象
注意:日志对象Logger 属于org.slf4j包下的,不要导错包

2.使用日志对象打印日志


具体实现可参考下面代码:

@Service
public class UserService {
    //1.获得日志对象
    @Autowired
    private static final Logger log= 
        LoggerFactory.getLogger(UserService.class);

    @PostConstruct
    public void UserService(){
        //2.自定义打印日志
        log.trace("trace 日志");
        log.debug("debug 日志");
        log.info("info 日志");
        log.warn("warn 日志");
        log.error("error 日志");
    }

}

打印结果如下,大家可能会发现我们trace和debug日志并没有被打印,这涉及到有关日志级别的问题,我们会在下面解释。 

在程序中获取⽇志对象需要使用日志工厂 LoggerFactory,日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才能更方便、更直观的定位到问题类。


而我们打印日志时的trace,debug等就是我们日志的级别,这个我们下面会提到。

2.2 日志格式说明 

 2.3 常见的日志框架说明

 上面这张图其实就解释了为什么我们需要导入org.slf4j这个包。因为Spring Boot日志框架slf4j实际上采用了“门面模式”。我们所有对日志的操作都是经过slf4j这个接口去调用底层的日志实现来完成的。而这样做的好处就是将底层与上层隔离,我们只需要关注上层的操作,当出现了更优秀的日志底层实现我们也能够及时更换而不影响上层的代码。

1.日志框架包括日志门面、日志实现

2.日志门面就相当于是装修公司,日志实现相当于是工程队(实现具体的操作),日志门面仅能对应一个日志实现

3.日志级别

3.1 日志级别的作用

日志的级别就是为了筛选符合目标的日志信息的。有了日志级别之后就可以过滤自己想看到的信息了,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者的信息筛选时间。

而这也就解释了为什么 我们之前的打印日志的代码trace和debug日志并没有被打印,因为Spring Boot默认的日志级别是info,低于此级别的日志都不会被打印。

3.2 日志级别的分类与使用

日志的级别分为:

trace:微量,少许的意思,级别最低;

debug:需要调试时候的关键信息打印;

info:普通的打印信息;

warn:警告,不影响使⽤,但需要注意的问题;

error:错误信息,级别较⾼的错误⽇志信息;

fatal:致命的,因为代码异常导致程序退出执⾏的事件。(此级别日志只能由系统自行打印)

日志级别的顺序:

越往上接收到的消息就越少。

日志使用:

 日志级别配置只需要在配置⽂件中设置“logging.level”配置项即可,如下所示:

#yml

logging:
 level:
   root: error

#properties

logging.level.root=error

注意:

1.root项代表设置日志级别的范围,root代表全局日志级别

2.当存在局部日志级别和全局日志级别时,局部日志级别优先级>全局日志级别优先级

 4.日志持久化

以上的日志都是输出在控制台上的,然而在⽣产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。

想要将日志进⾏持久化,只需要在配置⽂件中指定日志的存储目录或者是指定日志保存文件名之后, Spring Boot 就会将控制台的日志写到相应的⽬录或⽂件下了。

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

logging.file.name=D:/Data/

 注意:这里我们使用的是"/"而不是"\"。虽然Windows使用的是后者,但是它同样支持前者,并且由于Linux使用的也是前者,我们的系统大多也都会部署在Linux上,所以我们会使用"/"。但最主要的原因其实是"\"会被识别成转义字符导致Spring Boot无法识别正确路径而报错。

 

 如果我们真的想使用"\"我们也可以再它的前面再加一个"\"来转义,这样Spring Boot就可以正确识别出"\"(不推荐)。

注意:如果日志的内容过大,超过日志文件的容量,系统自动设置另一个日志文件保存

5.使用lombok输出日志

每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦,这⾥讲⼀ 种更好用的日志输出⽅式——使用 lombok 来更简单的输出。

在使用前我们需要执行以下步骤:
1. 添加 lombok 框架⽀持。

2. 使⽤ @slf4j 注解输出⽇志。

5.1 添加lombok依赖 

这里我们一般在创建项目时就会添加,见下图:

如果我们忘记添加也可以通过插件在项目内来快捷修改,这里我们需要安装EditStarters插件

 安装好后在pom.xml页面内右键选择”生成“

 选择该插件即可

 之后进入这个界面我们就可以去配置项目依赖了

 5.2 输出日志

@Controller
@Slf4j
public class UserController {

    @PostConstruct
    public void UserController(){
        log.trace("trace 日志");
        log.debug("debug 日志");
        log.info("info 日志");
        log.warn("warn 日志");
        log.error("error 日志");
    }
}

 可以看到我们实际上就是将获取日志对象这一重复繁琐的步骤换成了添加@Slf4j 注解。

注意:使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊日志,并且只能使用 log 对象才能输出,这是 lombok 提供的对象名。 

5.3 lombok 原理解释 

从直观感受来说,似乎就是@Slf4j 注解替换了获取日志对象的语句,其实事实确实如此。我们通过查看target目录来验证。target 为项目最终执⾏的代码,查看 target ⽬录如 下:

对比源文件:

 lombok的原理:lombok通过遵循Java编译器增强的规范,实现了Java源代码在生成字节码的时候功能的增强
@Slf4j注解的作用:IDEA编译源代码的时候,根据注解声明,在字节码文件中自动添加了一段 创建日志对象 的代码

 5.4 lombok 更多注解说明

搞明白了@Slf4j注解的作用,下面那些lombok下的注解我们应该也能够理解他们的作用和原理了

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot日志 的相关文章

随机推荐

  • Android屏幕适配全攻略(最权威的官方适配指导)

    转载请注明出处 http blog csdn net zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者 本篇文章以Google的官方文档为基础 全面而深入的讲解了Android屏幕适配的原因 重要概
  • Java for Web学习笔记(五九):Controller替代Servlet(1)请求匹配

    URL匹配 书写方式 是对DispatcherServlet所匹配的URL进行二次匹配 本例DispatcherServelt的servlet mapping中
  • Echarts隐藏坐标轴

    xAxis show false 不显示坐标轴线 坐标轴刻度线和坐标轴上的文字 axisTick show false 不显示坐标轴刻度线 axisLine show false 不显示坐标轴线 axisLabel show false 不
  • GNU许可证常见问题

    最新在学习开源软件 开源软件的组成最重要的一个就是license 及许可证 开源License在法律上赋予用户相关权利和义务 任何开源应用行为都必须围绕此 游戏规则 进行 其中重点学习了GUN GPL的许可证 本地记录下一个重要的网站 方便
  • 数据库出错提示Duplicate entry * for key *的解决方法

    错误编号 1062 错误提示 查询语句错误 1062 ERR Duplicate entry 16777215 for key PRIMARY SQL INSERT INTO forum attachment SET tid 0 pid 0
  • 揭秘Kaggle神器xgboost

    在 Kaggle 的很多比赛中 我们可以看到很多 winner 喜欢用 xgboost 而且获得非常好的表现 今天就来看看 xgboost 到底是什么以及如何应用 本文结构 什么是 xgboost 为什么要用它 怎么应用 学习资源 什么是
  • CROSS使用说明书 发行和拍卖NFT完整攻略

    鉴于目前去中心化NFT发行和拍卖平台CROSS是英文版本 对部分中国区用户存在操作困难 为了方便投资者和NFT爱好者能及时了解CROSS的相关信息和使用流程 现在CyberVein推出了更加详细的CROSS完整版教程 若还存有疑问 可添加中
  • windows7虚拟拔号服务器,ADSL采用虚拟拨号上网,使用Windows 7如何设置PPPoE宽带连接...

    今天介绍ADSL采用虚拟拨号上网 使用Windows 7操作系统如何设置PPPoE宽带连接 连接网络的方式有很多 现在小伙伴们上网使用的连接方式主要有以下几种 ADSL宽带上网 小区宽带上网 无线局域上网和无线移动上网 其中ADSL宽带上网
  • 使用Python实现二分查找算法及其应用场景详解

    引言 二分查找是一种常用的搜索算法 它可以在有序数组中高效地查找指定元素 本文将详细介绍二分查找算法的原理 实现方法 并探讨其在实际应用场景中的使用 通过深入了解二分查找算法 你将能够更好地理解它的工作原理并灵活应用于各种问题中 目录 引言
  • 像打王者荣耀一样的学习/工作?(转)

    https blog csdn net dataiyangu article details 97544551 depth 1 utm source distribute pc feed none task blog alirecmd 2
  • GET和POST的区别,java模拟postman发post

    题解 空心正方形图案 include
  • MFC对话框中屏蔽Enter键与ESC键

    文章内容无意义 存档用 MFC对话框应用程序中 按下回车键或者ESC键 对话框会自动关闭 原因在于 当用户按下Enter键时 Windows就会自动去查找 输入焦点 落在了哪一个按钮上 获得焦点的按钮的四周将被点线矩形框所包围 如果所有按钮
  • 关于hexo的笔记 以及 常见问题

    在 Hexo 中有两份主要的配置文件 其名称都是 config yml 其中 一份位于站点根目录下 blog config yml 主要包含 Hexo 本身的配置 另一份位于主题目录下 blog themes next config yml
  • 程序员的算法课(15)-分治法获取文件中出现频次最高100词

    一 问题描述 这个问题在大数据面试中容易出现 问题如下 有一个1G大小的一个文件 里面每一行是一个词 词的大小不超过16字节 内存限制大小是1M 要求返回频数最高的100个词 二 思路 此处1G文件远远大于1M内存 分治法 先hash映射把
  • sp3585调试

    最近在调试sp3485目前已调试成功 后续把调试过程补全
  • 用Python获取链家二手房房源数据,做可视化图分析数据

    前言 数据采集的步骤是固定 发送请求 模拟浏览器对于url地址发送请求 获取数据 获取网页数据内容 gt 请求那个链接地址 返回服务器响应数据 解析数据 提取我们需要的数据内容 保存数据 保存本地文件 所需模块 win R 输入cmd 输入
  • 从计组和操作系统详解IO控制方式

    IO控制方式 实际上IO在操作系统和计组里面都有讲到 这两个内容各有侧重 又有很大的重合 这里就整理一下 操作系统里面就讲了一下基本的过程 计组还讲了各个接口电路 1 直接程序控制方式 直接程序控制方式由用户进程直接控制主存或 CPU 和外
  • ARP报文头部格式和请求流程

    文章目录 ARP头部格式 ARP请求流程 ARP头部格式 格式说明 硬件类型 16位字段 用来定义运行ARP的网络类型 每个局域网基于其类型被指派一个整数 例如 以太网的类型为1 ARP可用在任何物理网络上 协议类型 16位字段 用来定义使
  • 随记:Flutter获取widget的大小位置,状态栏高度

    也可参考 https www jianshu com p 8117fbc5b4d3 1 获取状态栏高度 MediaQueryData fromWindow WidgetsBinding instance window padding top
  • Spring Boot日志

    目录 1 日志的作用 2 自定义打印日志 3 日志级别 4 日志持久化 5 使用lombok输出日志 1 日志的作用 日志是程序的重要组成部分 其实我们几乎无时无刻都在接触日志 简单的说它其实就是程序运行过程中产生的信息 它的主要作用就是帮