目录
日志有什么用?
日志怎么用?
自定义日志打印
在程序中得到日志对象
使用日志对象打印日志
日志格式
日志级别的分类与使用
日志级别设置
日志持久化
日志对于我们来说,最主要的用途就是排除和定位问题。
除了发现和定位问题之外,我们还可以通过日志实现以下功能:
记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。
记录系统的操作日志,方便数据恢复和定位操作人。
记录程序的执行时间,方便为以后优化程序提供数据支持。
以上这些都是日志提供的非常实用的功能。
Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:
通过上述日志信息我们能发现以下 3 个问题:
1.Spring Boot 内置了日志框架(不然也输出不了日志)。
2. 默认情况下,输出的日志并非是开发者定义和打印的,那开发者怎么在程序中自定义打印日志呢?
3. 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久的保存下来呢?
开发者自定义打印日志的实现步骤:
1. 在程序中得到日志对象。
2. 使用日志对象的相关语法输出要打印的内容。
在程序中获取日志对象需要使用日志工厂 LoggerFactory,如下代码所示:
private static Logger logger = LoggerFactory.getLogger(UserController.class);
日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才能更方便、更直观的定位到问题类。
注意:Logger 对象是属于 org.slf4j 包下的
因为 Spring Boot 中内置了日志框架 Slf4j,所以咱们可以直接在程序中调用 slf4j 来输出日志。
日志对象的打印方法有很多种,我们可以先使用 info() 方法来输出日志,如下代码所示:
logger.info("--------------要输出日志的内容----------------");
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认日志级别);
warn:警告,不影响使用,但需要注意的问题;
error:错误信息,级别较高的错误日志信息;
fatal:致命的,因为代码异常导致程序退出执行的事件。
日志级别的顺序:
越往上接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的日志了。
日志级别配置只需要在配置文件中设置“logging.level”配置项即可,如下所示:
logging:
level:
root: error
配置跟路径的日志级别。
@RestController
@RequestMapping("/user")
public class UserController {
// 1.得到⽇志对象
private static Logger logger =
LoggerFactory.getLogger(UserController.class);
@Value("${server.port}")
private String port;
@Value("${spring.datasource.url}")
private String url;
@RequestMapping("/sayhi")
public String sayHi() {
// 2.使⽤⽇志打印⽇志
logger.trace("================= trace ===============");
logger.debug("================= debug ===============");
logger.info("================= info ===============");
logger.warn("================= warn ===============");
logger.error("================= error ===============");
return "Hi," + url;
}
}
默认日志输出级别是info
以上的日志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。
想要将日志进行持久化,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名之后, Spring Boot 就会将控制台的日志写到相应的目录或文件下了。
配置日志文件的保存路径:
# 设置⽇志⽂件的⽬录
logging:
file:
path: D:\\home\\test
配置日志文件的文件名:
# 设置⽇志⽂件的⽬录
logging:
file:
path: D:/home/tests/pring-1204.log