【JavaEE Spring】SpringBoot 日志文件详解

15 篇文章 1 订阅
14 篇文章 0 订阅

1. 日志的作用

日志最主要的作用就是排除和定位问题。
除了发现和定位问题之外,日志还具有如下功能:

  • 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。
  • 记录系统的操作日志,方便数据恢复和定位操作人。
  • 记录程序的执行时间,方便为以后优化程序提供数据支持。

2. springboot 默认日志信息

Spring Boot 项目在启动时默认就有日志输出,如下图:
在这里插入图片描述
以上内容就是 Spring Boot 输出的控制台日志信息。springboot默认能在控制台输入日志信息说明:

  • springboot 内置了日志框架

3. 自定义打印日志

自定义打印日志实现步骤:

  • 在程序中得到日志对象
  • 使用日志对象的相关语法输出要打印的日志内容

3.1 在程序中得到日志对象

在程序中获取⽇志对象需要使⽤日志工厂 LoggerFactory,如下代码所示:

 // 1.得到日志对象
    private static final Logger log= LoggerFactory.getLogger(UserController.class);

(日志工厂需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位到问题类)

注意:Logger 对象是属于 org.slf4j 包下的
在这里插入图片描述
Slf4j是 springboot 中内置的日志框架,可以直接在程序中调用slf4j来输出日志

slf4j属于日志门面(相当于代理),日志实现其实是logback。(门面模式)
在这里插入图片描述

门面模式的优点:可以保证日志实现框架变化的情况下(比如从logback->log4j 1/2)时,开发者不必关注变化的细节,还是依旧使用slf4j这个代理来实现日志的打印,代码不必做出调整或调整很少,大大降低了开发的难度/复杂度。

3.2 使用日志对象打印日志

@Controller
@ResponseBody
public class UserController {

    // 1.得到日志对象
    private static final Logger log= LoggerFactory.getLogger(UserController.class);

    // 2.使用日志对象log打印日志
    @RequestMapping("/sayhi")
    public void sayHi(){
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");
    }
}

在浏览器中访问了相应的路由地址后发现日志成功打印~ (springboot默认日志级别是info ,大于等于info级别的日志能成功打印,次日志级别可以手动更改)
在这里插入图片描述

3.3 日志格式说明

在这里插入图片描述

4. 关于日志级别

⽇志的级别就是为了筛选符合⽬标的⽇志信息的。

有了⽇志级别之后就可以过滤⾃⼰想看到的信息了,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者的信息筛选时间。

4.1 日志级别的分类与使用

日志级别分为:

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

日志级别的顺序:
在这里插入图片描述
越往上接收到的消息就越少

4.2 日志配置

⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可,如下所示:
在这里插入图片描述
(在application.yml 配置文件中进行配置,配置根路径的日志级别,设置了当前全局日志级别为error)

配置 controller 文件夹下的日志级别为 error :
在这里插入图片描述
此时访问相应路由只在控制台上输出级别为error的日志信息:
在这里插入图片描述

5. 日志持久化

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

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

配置日志⽂件的保存路径:
在这里插入图片描述
此时去相应路径下查看:
在这里插入图片描述
日志持久化(保存到硬盘)成功;并且每次重启springboot项目日志信息是进行追加的,而不是重写的 ~
在这里插入图片描述
配置日志文件的⽂件名(一般实现是通过绝对路径(路径+文件名)的形式实现的):
在这里插入图片描述

打开相应路径显示:
在这里插入图片描述
同样,日志文件持久化成功~

6. 使用 lombok 实现更简单的日志输出

因为每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦;我们还可以使用 lombok 来更简单的输出,解决上述的繁琐问题

基本步骤:

  • 添加 lombok 框架⽀持。
  • 使⽤ @slf4j 注解输出日志。

6.1 使用Edit Starters插件进行快速添加框架至项目


在这里插入图片描述

6.2 使用 lombok 输出日志

代码如下:

@Controller
@Slf4j
@ResponseBody
public class LombokController {

    @RequestMapping("/log")
    public void loggerTest(){
        log.error("我是用lombok输出的error日志");
    }
}

在这里插入图片描述
(注意:使用 @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名)

6.3 lombok 更多注解说明

基本注解:

注解作用
@Getter自动添加getter方法
@Setter自动添加setter方法
@ToString自动添加ToString方法
@EqualsAndHashCode自动添加equals和hashcode方法
@NoArgsConstructor自动添加无参构造方法
@AllArgsConstructor自动添加全属性构造方法,顺序按照属性的定义顺序
@NonNull属性不能为null
@RequiredArgsConstructor⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需

组合注解:
在这里插入图片描述
日志注解:
在这里插入图片描述

6.4 lombok 原理解释

target 为项目最终执⾏的代码,查看 target ⽬录如下:
在这里插入图片描述
target目录下的为Java目录下的源代码经过编译后形成的能被jvm识别使用的 .class文件(字节码文件)

打开 刚刚使用过 @Slf4j 注解的LombokController 类的字节码文件如下:
(因为idea打开,所以字节码文件能够显示,其他软件打开就不一定能显示为Java代码了~)

在这里插入图片描述
Java 程序的运⾏原理:
在这里插入图片描述
Lombok作用的结果如下图 :
在这里插入图片描述
也就是说lombok在程序编译阶段就把相应注解变成了相应的对象,来执行相应的功能(比如这里的日志输出),然后把编译完成的class文件给jvm来进行加载运行 ~

lombok起作用的阶段就是程序的编译阶段(.java -> .class)

  • over ~ ~
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值