上一篇文章介绍了日志级别和自定义输出日志 链接https://blog.csdn.net/qq_45875349/article/details/132510387?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132510387%22%2C%22source%22%3A%22qq_45875349%22%7D那么想要将控制台上的日志信息,保存在硬盘上,以便出问题之后追溯问题该怎么办呢?这个把日志保存下来的过程就是日志持久化。
1 日志持久化
想要实现日志的持久化也很简单只需要在配置文件中指定日治的存储目录或者是指定日志保存的文件名,springboot就会将控制台的日志写入到相应的目录或者文件中。
配置日志文件的保存路径(此时日志名称就是默认是spring.log):
# 设置⽇志⽂件的⽬录
logging.file.path: F:\\project_java\\log
或者直接把名称也给定,此时日志名称就是我们自定义的名称
# 设置⽇志⽂件的⽂件名
logging.file.name: F:\\project_java\\log\\spring-0826.log
2 使用lombok输出日志
- 1. 添加 lombok 框架⽀持。
- 2. 使⽤ @slf4j 注解输出⽇志
2.1 添加lombok依赖
如果在建立spring项目的时候没有选择加入lombok依赖那么我们需要手动的添加lombok依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2.2 使用lombok输出日志
import com.example.mybatis_demo.entity.UserEntity;
import com.example.mybatis_demo.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("user")
@Slf4j
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("getall")
public List<UserEntity> getAll() {
log.error("======使用lombok打印日志=========");
return userService.getAll();
}
}
注意:使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志, 并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名
2.3 lombok原理
也就是说我们在使用@Slf4j的注解后,lombok自动将注解转换成代码,减轻了开发者简单繁琐的工作。
Java程序的运行原理:
Lombok 的作⽤如下图所示:
2.4 lombok更多注解说明
-
@Getter / @Setter: 自动生成字段的getter和setter方法。
-
@NoArgsConstructor: 自动生成无参构造函数。
-
@AllArgsConstructor: 自动生成包含所有字段的构造函数。
-
@RequiredArgsConstructor: 自动生成带有被
@NonNull
注解标记的字段的构造函数。 -
@ToString: 自动生成
toString()
方法,可以自定义包含的字段列表。 -
@EqualsAndHashCode: 自动生成
equals()
和hashCode()
方法,可以自定义包含的字段列表。 -
@Data: 一个组合注解,等同于
@Getter
、@Setter
、@ToString
、@EqualsAndHashCode
和@RequiredArgsConstructor
的合集。 -
@Builder: 自动生成一个构建器模式的构造函数,用于创建对象实例。
-
@Slf4j: 自动生成一个私有的
log
字段,以方便在类中使用日志。 -
@NonNull: 标记一个字段,表示该字段不能为null,会在构造函数中进行非空检查。
-
@Value: 类似于
@Data
,但生成的类会是不可变(immutable)的,适用于值对象。 -
@NoArgsConstructor(access = AccessLevel.PROTECTED): 生成一个受保护的无参构造函数,用于继承关系中。
-
@Cleanup: 可以自动关闭资源,如输入/输出流,在代码块结束时。
-
@Synchronized: 生成同步锁,可以将方法声明为同步的。
-
@AllArgsConstructor(staticName = "of"): 自动生成一个包含所有字段的构造函数,并添加一个静态工厂方法
of
来创建对象。