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

JavaEE进阶第六课:SpringBoot ⽇志⽂件

上篇文章介绍了SpringBoot配置文件,这篇文章我们将会介绍SpringBoot ⽇志⽂件

荔枝

  • 1.日志有什么用
  • 2.自定义日志输出
    • 2.1获取程序日志对象
    • 2.2使用相关方法输出日志
    • 2.3日志级别
      • 2.3.1日志级别的作用
      • 2.3.2日志级别如何设置
    • 2.4日志格式
  • 3.持久化日志
  • 4.更简单的日志输出
    • 4.1使用Lombok进行日志输出
    • 4.2Lombok更多注解
  • 结尾

1.日志有什么用

日志主要是我们程序运行时的一些相关信息,比如启动端口,报错信息什么的,我们SpringBoot项目运行时(因为SpringBoot内置了日志框架),就会输出一些日志:
在这里插入图片描述
那么它有什么用呢?想象一样,如果没有日志信息,当我们的应用程序出现问题时,我们怎么定位问题出现在哪呢?类和方法那么多,我们一个一个排除肯定是来不及的,所以日志的信息就尤为重要,可以帮助我们快速定位问题源头。
但是上图的日志是默认的,并不是我们定义的,那么怎么才能自定义日志并输出呢?

2.自定义日志输出

2.1获取程序日志对象

再输出日志之前,我们要先从当前程序获取日志对象

public static Logger logger=LoggerFactory.getLogger(.class);

这里去除了大量参数,但是保留了是类对象,因为这样你才知道这个日志来自哪个类!
在这里插入图片描述
注意,Logger这个类来自org.slf4j 包下的,不要导⼊错包

2.2使用相关方法输出日志

Logger中有很多类,对应了不同等级的日志信息,我们常用的方法:

        logger.trace();logger.debug();logger.info();logger.warn();logger.error();//里面可填不同的参数

这里我们写一段代码测试一下:

@ResponseBody
@RequestMapping("user")
@Component
public class LogDemo {public static Logger logger=LoggerFactory.getLogger(LogDemo.class);@RequestMapping("demo")public void test(){logger.trace("i am trace");logger.debug("i am debug");logger.info("i am info");logger.warn("i am warn");logger.error("i am error");}
}

运行得到结果:
在这里插入图片描述
我们发现明明写了五个方法,怎么只输出了后三个?这是因为SpringBoot输出的日志大于等于当前日志等级的,我们没有设置,默认就是info。

2.3日志级别

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

2.3.1日志级别的作用

日志有了级别,我们就能快速找到注意的错误信息,减少查错时间,同时因为只输出高等级的日志也能减少我们日志文件的大小,否则一个日志就几个G,找错要找到什么时候

2.3.2日志级别如何设置

设置日志级别是在配置文件中修改,主要分为两种设置:
1.设置全局

logging:level:root: debug

在这里插入图片描述
这里我们就把默认的日志级别改成debug了
2.设置局部
有时,我们的日志的需求,可能是这个类为debug,另一个类为warn这种,全局设置肯定不行,这里就需要设置单独的类或者包的日志级别:
(这里设置一个类为warn,一个为info)

logging:level:root: infocom:example:demo:test:LogTest: warn

这里的root是根目录,com等都是包名,LogTest是类名:
在这里插入图片描述

运行结果:
在这里插入图片描述

2.4日志格式

那么我们的日志是输出了,但是它各部分都有什么含义呢?我们来深入了解一下:
在这里插入图片描述

3.持久化日志

看到这里,我们的日志自定义日志确实输出了,但是它是输出在控制台上的,也就是我们的程序重新启动它就消失了,这样的话,和System.out.printf()直接打印好像没什么区别,想要持久化的存储日志就要把它保存至硬盘上。
只需要在配置文件中设置一下即可:
在这里插入图片描述
点击运行,打开path对应文件夹,发现多了一个文件spring.log,打开即可看到我们的日志
在这里插入图片描述
这里我们的path只是设置了目录,并没有指定到一个文件,那如何指定文件呢,配置项path要更换成配置项name(文件名称)
在这里插入图片描述
没有这个文件也没关系,它会自动帮你生成的:
在这里插入图片描述

4.更简单的日志输出

4.1使用Lombok进行日志输出

获取程序日志对象的代码,可以发现:

public static Logger logger=LoggerFactory.getLogger(.class);

如果类多的情况下,这个代码出现的频率也高,本身这代码看起来就挺繁琐的,因为每个类基本上就类.class不同,能不能简化它呢?当然可以!这里就要用到我们的神器Lombok,可以通过其中的一个注解@Slf4j,帮助我们构建日志对象log:
在这里插入图片描述
这样就方便多啦!
为什么一个小小的注解就能帮助我们构造日志对象?我们编译代码生成.class文件后,观察LogDemo.class,可以发现:
在这里插入图片描述
@Slf4j没有了,取而代之的是我们熟悉的“它”。

4.2Lombok更多注解

基础注解:

@Getter
⾃动添加 getter ⽅法
@Setter
⾃动添加 setter ⽅法
@ToString
⾃动添加 toString ⽅法
@EqualsAndHashCode
⾃动添加 equals 和 hashCode ⽅法
@NoArgsConstructor
⾃动添加⽆参构造⽅法
@AllArgsConstructor
⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull
属性不能为 null
@RequiredArgsConstructor
⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需

组合注解:

@Data
== @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor

日志注解:

@Slf4j
添加⼀个名为 log 的⽇志,使⽤ slf4j

结尾

今天的日志学习就到这里啦!下一期进入SpringMVC的学习哦!

http://www.lryc.cn/news/26444.html

相关文章:

  • 外置MOS管平均电流型LED降压恒流驱动器
  • python+pytest接口自动化(6)-请求参数格式的确定
  • 开发手册——一、编程规约_3.代码格式
  • 十七、Django-restframework之序列化器(二)
  • python GUI图形化编程-----wxpython
  • 【Python 】yyyy-MM-dd HH:mm:ss 时间格式 时间戳 全面解读超详细
  • 【C++】C++11 异常
  • 关于Thread.start()后的困惑、imap
  • qml学习之qwidget与qml结合使用并调用信号槽交互
  • 【 华为OD机试 2023】 组装新的数组(C++ Java JavaScript Python)
  • 【洛谷 P2089】烤鸡(循环枚举)
  • windows10安装ubantu双系统
  • 【华为OD机试 2023】 人数最多的站点/小火车最多人时所在园区站点(C++ Java JavaScript Python)
  • 2024届暑期实习实录(阿里云大数据研发平台)
  • 空口协议probe req和probe rsp 、auth req和auth rsp 、assoc req和assoc rsp讲解
  • vscode ssh一直卡在wget的解决方案
  • 【Python学习笔记】第二十五节 Python MySQL
  • 折叠屏手机自带的屏幕表面层为什么不能自己撕?
  • 20.hadoop系列之Yarn资源调度器
  • 206页16万字城市运行“一网统管”体系建设项目需求报告
  • 【JS】数组Array的使用
  • 2023年,软件测试怎么样?
  • 【学习笔记】NOMURA Programming Competition 2020
  • iis下常用程序的伪静态规则列表(包括wordpress、thinkphp)
  • 【Python语言基础】——Python Select From
  • 数据增广真有那么神奇吗?
  • 常用基础硬件知识 - 判断MOS管导通
  • 2023金三银四,测试人还能找到好工作吗?
  • c++构造函数
  • redis 未授权访问漏洞