Spring Boot 日志文件,你都会了吗?

news2024/11/15 1:54:10

目录

1、日志文件的作用

2、日志的使用

2.1、从程序中得到日志对象

2.2、使用日志

2.3、日志格式

3、日志级别

3.1、这样的日志级别有什么用?

3.2、日志级别分类和使用

3.3、日志级别设置

4、日志持久化

5、更简单的日志输出——lombok

5.1、对比

5.2、lombok的实现原理

5.3、lombok更多的注解说明


1、日志文件的作用


  • 程序报错时可以发现并解决问题。
  • 记录用户登录日志,分析用户是否是正常登录。
  • 记录系统操作日志,方便数据恢复和定位操作人。
  • 记录程序执行时间,方便为以后优化程序提供数序支持。

2、日志的使用


2.1、从程序中得到日志对象

例如,在自定义类(假设类名为LogController)中,在程序中使需要使用日志工厂 LoggerFactory 先获取日志对象(日志在程序运行期间只加载一次,并且不可变,需要使用static和final),如下:

    //获取日志对象
    private static final Logger log = LoggerFactory.getLogger(LogController.class);

Ps:logger 对象是属于 org.slf4j 包下!

2.2、使用日志

日志打印的方式有很多种,例如使用 error 方法,如下:

    //打印日志
    private void printLog() {
        log.error("这是一个error");   
    }

执行效果如下: 

日志里面这些都表示什么意思呢?

接着往下看~

2.3、日志格式

3、日志级别


3.1、这样的日志级别有什么用?

  • 筛选出重要信息,例如在配置文件中设置级别为 warn ,那么你就只能看到warn以及比特级别更高的日志信息了(error、fatal)。
  • 控制不同环境下的日志信息,例如开发环境需要很详细的信息,而生产环境为了性能和安全性就会输入尽量少的日志。

3.2、日志级别分类和使用

日志级别从高到低,如下:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认⽇志级别);
  • warn:警告,不影响使⽤,但需要注意的问题;
  • error:错误信息,级别较⾼的错误⽇志信息;
  • fatal:致命的,因为代码异常导致程序退出执⾏的事件。

3.3、日志级别设置

日志输出的默认级别是 info ,如果想要手动配置,可以在配置配置文件中设置logging.level配置即可,如下:

logging:
    level:
     root: error

以上是对所有包下的日志级别有效(root也就是根目录),若想要设置指定某一包下的有效,就需要在level下加上路径(路径以java文件为起始位置),如下:

4、日志持久化


在生产环境下需要将日志信息保留下来,便于出现问题以后容易追溯问题,将日志保存下来这个活动叫做日志持久化。

如何进行日志持久化?我们只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名即可,如下

指定日志的存储目录:

logging:
    file:
        path: D:\\test\\testDemo

指定日志文件的文件名:

logging:
    file:
        path: D:\\test\\testDemo\\spring-boot-2023.log

Ps:在没有指定文件名两次保存或者指定相同文件名进行两次保存的情况下,第二次保存的日志信息会追加到第一次保存的文件下,而不是覆盖掉上一此保存的日志信息。值得注意的是日志文件的大小一般都有上限(文件太大,有可能导致加载过慢),当然也可以自己手动设置文件大小的上限

5、更简单的日志输出——lombok


5.1、对比

如果不使用lombok,我们创建和使用日志对象需要如下步骤:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody //返回的使页面不是文本
public class LogController {

    //获取日志对象
    private static final Logger log = LoggerFactory.getLogger(LogController.class);

    //打印日志
    @RequestMapping("/hi")
    private void printLog() {
        log.error("这是一个error");
    }

}

如果使用lombok,我们创建和使用日志对象需要如下步骤:

a)首先需要添加如下依赖:

<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.20</version>
     <optional>true</optional>
</dependency>

b)使用lombok:

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
@Slf4j
public class LogEasyController {

    @RequestMapping("/hi/easy")
    private void printLog() {
        log.error("这是一个error");
    }

}

对比图:

5.2、lombok的实现原理

我们的Java程序在IDEA中执行完后,都会编译生成一个target文件,这个文件就是项目最终执行的代码(去掉注释等一系列工作后的文件),那么想要知道lombok的实现原理,就需要去观察这个文件~

 

也就是说lombok的实现原理就是在编译阶段加上了我们原本需要的代码~

Java程序运行原理:

使用Lombok后的Java运行原理:

5.3、lombok更多的注解说明

注解作用
@Getter⾃动添加 getter ⽅法
@Setter动添加 setter ⽅法
@ToString⾃动添加 toString ⽅法
@EqualsAndHashCode⾃动添加 equals 和 hashCode ⽅法
@Slf4添加⼀个名为 log 的⽇志,使⽤ slf4j
@NoArgsConstructor⾃动添加⽆参构造⽅法
@AllArgsConstructor⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull属性不能为 null
@RequiredArgsConstructor⾃动添加必需属性的构造⽅法,final + @NonNull 的 属性为必需
@Data@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/357829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阅读源码和查看官方文档,是解决问题最高效的办法。

作为一个工作8年的老程序员告诉你&#xff1a;阅读源码和查看官方文档&#xff0c;是解决问题最高效的办法。不信你来看&#xff0c;这个困扰了读者半天的问题我查了源码和文档后瞬间解决。 前言 上周五有位读者私信我一个问题&#xff0c;说困扰了他半天&#xff0c;研究了一…

利用Rust与Flutter开发一款小工具

1.起因 起因是年前看到了一篇Rust iOS & Android&#xff5c;未入门也能用来造轮子&#xff1f;的文章&#xff0c;作者使用Rust做了个实时查看埋点的工具。其中作者的一段话给了我启发&#xff1a; 无论是 LookinServer 、 Flipper 等 Debug 利器&#xff0c;还是 Flutt…

基于springboot+vue的疾病匿名检测查询系统

基于springbootvue的疾病匿名检测查询系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背…

【拥抱开源】发布自己的项目到maven中央仓库

文章目录&#x1f388;第一步&#xff0c;注册账号&#x1f4bf;第二步&#xff0c;登录&#x1f4c0;第三步&#xff0c;设置信息&#x1f4be;第四步&#xff0c;创建问题&#x1f4f9;第五步&#xff0c;验证信息&#x1f3a5;第六步&#xff0c;上传jar包到中央仓库&#x…

网页中字体混淆的处理(简易方法)——爬虫学习笔记

网页中字体混淆的处理——爬虫学习笔记之评论爬取一、网页分析1、打开某点评网址。2、在网页源代码中寻找评论信息&#xff08;1&#xff09;进入这个“火锅店”的详情页&#xff0c;然后右击“检查”&#xff08;2&#xff09;点上面“刷新”详情页&#xff0c;逐步寻找。&…

RK3288 GPIO记录

1、引脚对应的GPIO 编号第一种 使用/sys/kernel/debug/gpio查询所有gpio引脚的基数第二种 cat /sys/class/gpio/gpiochip248/label对应的label就是GPIO引脚&#xff0c;例如下图GPIO8对应的基数就是2482、计算编号编号 基数 PIN脚如GPIO8的基数是248&#xff0c; GPIO8_A6的编…

Java开发 - 数风流人物,还看“微服务”

目录 前言 服务器端的发展历程 早期的服务器 动态的页面 用户内容网站 微服务 企业级应用 互联网应用 微服务介绍 什么是微服务&#xff1f; 为什么使用微服务 怎么使用微服务 Spring Cloud 什么是Spring Cloud Nacos注册中心 什么是Nacos 创建微服务项目 创建…

【Servlet篇】一文带你吃透Request对象

文章目录1. 前言2. Request 对象2.1 Request 继承体系2.2 Request 获取请求参数1. 获取请求行数据2. 获取请求头数据3. 获取请求体数据4. 获取请求参数的通用方式3. IDEA中快速创建 Servlet你问我青春还剩几年&#xff1f;我的回答是&#xff0c;趁现在&#xff0c;正当时。身边…

CS144-Lab2

实验架构 除了写入传入流之外&#xff0c;TCPReceiver 还负责通知 sender 两件事&#xff1a; “First unassembled” 字节的索引&#xff0c;称为“acknowledgment”或 “ackno”。这是接收方需要来自发送方的第一个字节。“first unassembled ” 索引和“first unacceptable…

【项目精选】基于SSH的任务调度系统的设计与实现(视频+源码+论文)

点击下载源码 虽然科技进步在改革开发这几十年来速度飞快&#xff0c;计算机行业也发展迅速&#xff0c;但仍然有大量商家或企业&#xff0c;甚至项目组&#xff0c;采用落后的人工管理方式或者低效的任务调度策略&#xff0c;这无疑是对计算机的一种无视。 计算机处理信息的准…

Python每日一练(20230220)

目录 1. 存在重复元素 II 2. 按要求实现程序功能 3. 分割链表 附录 链表 1. 存在重复元素 II 给定一个整数数组和一个整数 k&#xff0c;判断数组中是否存在两个不同的索引 i 和 j&#xff0c;使得 nums [i] nums [j]&#xff0c;并且 i 和 j 的差的 绝对值 至多为 k。 …

高级数据类型

为了解决单一的业务而存在bitmapsBitmaps类型的基础操作 获取指定key对应偏移量上的bit值getbit key offset 设置指定key对应偏移量上的bit值&#xff0c;value只能是1或0setbit key offset valueBitmaps类型的扩展操作状态位的统计业务需求&#xff1a;1. 统计每天某一部电…

云计算ACP云服务器ECS实例题库(三)

&#x1f618;作者简介&#xff1a;一名99年软件运维应届毕业生&#xff0c;正在自学云计算课程。&#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。&…

关于监控服务器指标、CPU、内存、警报的一些解决方案

文章目录关于监控服务器指标、CPU、内存、警报的一些解决方案Prometheus Grafana 配置 IRIS / Cach 监控服务器Prometheus简介特点架构图Grafana简介特点配置流程自定义Prometheus接口定义配置 Exporter 监控服务器系统资源简介配置流程使用 Alertmanager报警简介配置流程基于…

软考高级-信息系统管理师之知识管理(最新版)

知识管理 知识与知识管理知识管理常用的方法和工具显性知识的管理隐形知识的管理知识管理的工具学习型组织知识产权保护计算机软件保护条例商标法专利法补充建议学的考点:知识与知识管理 1、知识的分类 知识可分为两类,分别是显性知识与隐性知识。 凡是能以文字与数字来表达…

【C++】关联式容器——map和set的使用

文章目录一、关联式容器二、键值对三、树形结构的关联式容器1.set2.multiset3.map4.multimap四、题目练习一、关联式容器 序列式容器&#x1f4d5;:已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为…

新能源汽车,有毒

作者| Mr.K 编辑| Emma来源| 技术领导力(ID&#xff1a;jishulingdaoli)新能源汽车到底有多火&#xff0c;生生逼得奥迪某4S店挂出横幅&#xff1a;我们也有纯电新能源&#xff01;老牌名车的辛酸憋屈溢出屏幕。网友神评补刀“这标语给人‘诺基亚也有智能大屏机’的感觉。”一…

【Java基础】变量

Java基础 变量 variable 变量类型 实例变量(非静态字段) Instance Variables (Non-Static Fields) 类的非静态属性 类变量(静态字段) Class Variables (Static Fields) 类的静态属性 局部变量 Local Variables 参数 Parameters 变量命名 大小写敏感 开头&#xff1a;字…

爬虫基本知识的认知(爬虫流程 HTTP构建)| 爬虫理论课,附赠三体案例

爬虫是指通过程序自动化地从互联网上获取数据的过程。 基本的爬虫流程可以概括为以下几个步骤&#xff1a; 发送 HTTP 请求&#xff1a;通过 HTTP 协议向指定的 URL 发送请求&#xff0c;获取对应的 HTML 页面。解析 HTML 页面&#xff1a;使用 HTML 解析器对获取的 HTML 页面…

linux shell 入门学习笔记4 shell运维和编程语言

shell 运维和编程语言 脚本注释 shell脚本中&#xff0c;#后面的内容表示注释内容&#xff0c;一般是给开发者或使用者观看&#xff0c;解释器会忽略此部分内容注释可以单独写一行&#xff0c;也可以跟在文件末尾保持注释的习惯&#xff0c;尽量使用英文 例子&#xff1a; #…