基本概念
日志文件记录了程序的报错信息,执行时间,用户的登录状态,操作时间等等
通过日志,我们可以轻松的找到程序的问题,得到程序的相关信息
springBoot启动时控制台打印的这些,就是程序的日志
创建日志
首先创建日志对象
private static final Logger logger = LoggerFactory.getLogger(类名.class);
注意:Logger是在slf4j包下
SLF4J使用的是门面模式,也就是说我们调用SLF4J的方法,SLF4J会帮我们取调用log底层的方法
使用类对象的下面几种不同的方法,就可以打印不同种类的日志
logger.trace("this is trace");
logger.debug("this is debug");
logger.info("this is info");
logger.warn("this is warn");
logger.error("this is error");
例如,创建一个StudentController类
@Controller
@ResponseBody //表示当前类返回的是数据而不是页面
@RequestMapping("/user")
public class UserController {
//得到日志对象
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@RequestMapping("/hi")
public String sayHi(){
logger.trace("this is trace");
logger.debug("this is debug");
logger.info("this is info");
logger.warn("this is warn");
logger.error("this is error");
return "Hi,SpringBoot";
}
}
在浏览器中访问http://127.0.0.1:8080/user/hi后,控制台就会出现相关日志
详细含义如下:
其中,我们调用的logger的不同的方法就对应了日志的不同级别,具体如下
日志级别
- trace: 微量
- debug:需要调试时,可以打印关键信息
- info:普通的打印信息
- warn:警告,不影响使用,但需要注意的信息
- error:错误,级别较高的错误信息
- fatal:致命,代码异常导致程序退出
从上到下,日志的级别越来越高,打印的信息越来越严重
可以在配置文件中设置日志级别,例如设置warn,就只会打印warn以上级别的日志了:warn,error,fatal
默认的级别是info
配置文件:
logging:
level:
root: warn
root代表所有文件都设置为warn级别
可以看到,打印的信息只剩下这些了
并且,可以根据不同的包设置不同的日志级别
logging:
level:
root: error
com:
example:
controller: trace
service: debug
日志持久化
在生产环境上是没有控制台的,因此需要将日志保存下来,也就是日志持久化
在配置文件中加上保存路径
logging:
file:
path: 保存路径
或者使用路径加保存文件名:
logging:
file:
name: 保存名称
例如:
logging:
file:
name: /Users/lixiao/Desktop/SpringBoot-log.log
使用lombok进行日志输出
之前的博客:Spring——Bean的作用域和生命周期,介绍过lombok的用途,接下来介绍如何使用lombok更简单的进行日志的输出
引入依赖
在之前博客的springboot项目的创建时,就选择了lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
如果springboot没有添加lombok,可以下载这个插件
之后,在pom文件中右键,点击generate
使用edit starter
就可以像创建springboot一样,引入我们需要的依赖了
使用lombok
直接在类名上添加@Slf4j注解,即可使用log对象
例如:
@Controller
@ResponseBody
@RequestMapping("/article")
@Slf4j
public class ArticleController {
@RequestMapping("/hi")
public String sayHi(){
log.error("test slf4j");
return "hi article controller";
}
}
也就是说,@Slf4j代替了创建logger对象的过程
也就是这一步
private static final Logger logger = LoggerFactory.getLogger(ArticleController.class);
lombok的原理在于,肉眼上使用注解替代了创建日志对象的代码,而事实上底层字节码文件中,还是需要创建日志对象
可以查看target目录中的ArticleController