目录
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 |