- 1.日志有什么用?
- 2.日志怎么用?
- 3.自定义日志打印
- 3.1 在程序中得到日志对象
- 3.2 使用日志对象打印日志
- 3.3 日志格式说明
- 4.日志级别
- 4.1 日志级别有什么用?
- 4.2 日志级别的分类与使用
- 5.日志持久化
- 6.使用lombok进行日志输出
- 6.1 添加 lombok 依赖
- 6.2 输出日志
日志是程序的重要组成部分,我们可以通过日志实现以下功能:
- 通过日志发现问题,定位问题然后解决问题;
- 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户;
- 记录系统的操作日志,方便数据恢复和定位操作人;
- 记录程序的执行时间,方便为以后优化程序提供数据支持。
Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:
以上内容就是 Spring Boot 输出的控制台日志信息。
通过上述日志信息我们能发现以下 3 个问题:
- Spring Boot 内置了日志框架(不然也输出不了日志)。
- 默认情况下,输出的日志并非是开发者定义和打印的,那开发者怎么在程序中自定义打印日志呢?
- 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久的保存下来呢?
自定义打印日志的实现步骤:
- 在程序中得到日志对象。
- 使用日志对象的相关语法输出要打印的内容。
在程序中获取日志对象需要使用日志工厂 LoggerFactory,如下代码所示:
@Controller
public class UserController {
// 得到日志的打印对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
}
日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才能更方便、更直观的定位到问题类。
注意
Logger 对象是属于 org.slf4j 包下的:
日志对象的打印方法有很多种,我们可以先使用 info() 方法来输出日志,如下代码所示:
@Controller
public class UserController {
// 得到日志的打印对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
@RequestMapping("/sayhi")
@ResponseBody
public String sayHi() {
// 打印日志
logger.info("--------------要输出⽇志的内容----------------");
return "你好";
}
}
启动项目,在浏览器输入url:http://localhost:8080/sayhi,可以看到控制台打印了该日志:
日志的级别就是为了筛选符合目标的日志信息的。试想⼀下这样的场景,假设你一家 2 万人公司的⽼板,那么每人员⼯的日常⼯作和琐碎的信息都要反馈给你吗?⼀定不会,因为你根本没有那么多经历。于是就有了组织架构,而组织架构就会分级,有很多的级别设置,有了组织架构之后,就可以逐级别汇报消息了,例如:组员汇报给组长;组长汇报给研发一组;研发一组汇报给 Java 研发,等等依次进行汇报。
而日志分级大概的道理也是⼀样的,有了日志级别之后就可以过滤自己想看到的信息了,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者的信息筛选时间。
日志分类:
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息;
- warn:警告,不影响使用,但需要注意的问题;
- error:错误信息,级别较高的错误日志信息;
- fatal:致命的,因为代码异常导致程序退出执行的事件。
日志级别从上往下由低到高,越往上接受到的信息越少。
日志使用:
日志级别配置只需要在配置文件中设置“logging.level”配置项即可,如下所示:
logging:
level:
root: error
配置根路径的日志级别为:error。
@Controller
public class UserController {
// 得到日志的打印对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
@RequestMapping("/sayhi")
@ResponseBody
public String sayHi() {
// 打印日志
logger.trace("我是 trace");
logger.debug("我是 debug");
logger.info("我是 info");
logger.warn("我是 warn");
logger.error("我是 error");
return "你好";
}
}
控制台输出:
可以看到只输出了error日志。
清除掉配置文件中的日志设置,观察控制台输入的日志级别。
5.日志持久化可以得出日志的默认输出级别是 info。
以上的日志都是输出在控制台上的,然而在⽣产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。
想要将日志进行持久化,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名之后,Spring Boot 就会将控制台的日志写到相应的目录或文件下了。
配置日志文件的保存路径并设置文件名:
logging:
file:
# 设置日志文件的目录
path: E:/logger
# 设置日志文件的文件名
name: E:/logger/springboot2.log
运行项目,可以看到目录下生成了该文件:
与控制台输出一致:
每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加一遍,也很麻烦,可以使用 lombok 来更简单的输出。
6.1 添加 lombok 依赖6.2 输出日志org.projectlombok lombok 1.18.20 true
使用 @Slf4j 注解,在程序中使用 log 对象即可输入日志
@Controller
@Slf4j
public class StudentController {
@RequestMapping("/sayhi2")
@ResponseBody
public String sayHi2() {
log.info("我是 info");
log.warn("我是 warn");
log.error("我是 error");
return "你好";
}
}
控制台输出:



