上篇文章介绍了SpringBoot配置文件,这篇文章我们将会介绍SpringBoot ⽇志⽂件
日志主要是我们程序运行时的一些相关信息,比如启动端口,报错信息什么的,我们SpringBoot项目运行时(因为SpringBoot内置了日志框架),就会输出一些日志:
那么它有什么用呢?想象一样,如果没有日志信息,当我们的应用程序出现问题时,我们怎么定位问题出现在哪呢?类和方法那么多,我们一个一个排除肯定是来不及的,所以日志的信息就尤为重要,可以帮助我们快速定位问题源头。
但是上图的日志是默认的,并不是我们定义的,那么怎么才能自定义日志并输出呢?
再输出日志之前,我们要先从当前程序获取日志对象
public static Logger logger=LoggerFactory.getLogger(类.class);
这里去除了大量参数,但是保留了是类对象,因为这样你才知道这个日志来自哪个类!
注意,Logger这个类来自org.slf4j 包下的,不要导⼊错包
Logger中有很多类,对应了不同等级的日志信息,我们常用的方法:
logger.trace();
logger.debug();
logger.info();
logger.warn();
logger.error();
//里面可填不同的参数
这里我们写一段代码测试一下:
@ResponseBody
@RequestMapping("user")
@Component
public class LogDemo {
public static Logger logger=LoggerFactory.getLogger(LogDemo.class);
@RequestMapping("demo")
public void test(){
logger.trace("i am trace");
logger.debug("i am debug");
logger.info("i am info");
logger.warn("i am warn");
logger.error("i am error");
}
}
运行得到结果:
我们发现明明写了五个方法,怎么只输出了后三个?这是因为SpringBoot输出的日志大于等于当前日志等级的,我们没有设置,默认就是info。
⽇志的级别分为:
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认⽇志级别);
warn:警告,不影响使⽤,但需要注意的问题;
error:错误信息,级别较⾼的错误⽇志信息;
fatal:致命的,因为代码异常导致程序退出执⾏的事件。
日志有了级别,我们就能快速找到注意的错误信息,减少查错时间,同时因为只输出高等级的日志也能减少我们日志文件的大小,否则一个日志就几个G,找错要找到什么时候
设置日志级别是在配置文件中修改,主要分为两种设置:
1.设置全局
logging:
level:
root: debug
这里我们就把默认的日志级别改成debug了
2.设置局部
有时,我们的日志的需求,可能是这个类为debug,另一个类为warn这种,全局设置肯定不行,这里就需要设置单独的类或者包的日志级别:
(这里设置一个类为warn,一个为info)
logging:
level:
root: info
com:
example:
demo:
test:
LogTest: warn
这里的root是根目录,com等都是包名,LogTest是类名:
那么我们的日志是输出了,但是它各部分都有什么含义呢?我们来深入了解一下:
看到这里,我们的日志自定义日志确实输出了,但是它是输出在控制台上的,也就是我们的程序重新启动它就消失了,这样的话,和System.out.printf()直接打印好像没什么区别,想要持久化的存储日志就要把它保存至硬盘上。
只需要在配置文件中设置一下即可:
点击运行,打开path对应文件夹,发现多了一个文件spring.log,打开即可看到我们的日志
这里我们的path只是设置了目录,并没有指定到一个文件,那如何指定文件呢,配置项path要更换成配置项name(文件名称)
没有这个文件也没关系,它会自动帮你生成的:
获取程序日志对象的代码,可以发现:
public static Logger logger=LoggerFactory.getLogger(类.class);
如果类多的情况下,这个代码出现的频率也高,本身这代码看起来就挺繁琐的,因为每个类基本上就类.class不同,能不能简化它呢?当然可以!这里就要用到我们的神器Lombok,可以通过其中的一个注解@Slf4j,帮助我们构建日志对象log:
这样就方便多啦!
为什么一个小小的注解就能帮助我们构造日志对象?我们编译代码生成.class文件后,观察LogDemo.class,可以发现:
@Slf4j没有了,取而代之的是我们熟悉的“它”。
基础注解:
@Getter
⾃动添加 getter ⽅法
@Setter
⾃动添加 setter ⽅法
@ToString
⾃动添加 toString ⽅法
@EqualsAndHashCode
⾃动添加 equals 和 hashCode ⽅法
@NoArgsConstructor
⾃动添加⽆参构造⽅法
@AllArgsConstructor
⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull
属性不能为 null
@RequiredArgsConstructor
⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需
组合注解:
@Data
== @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor
日志注解:
@Slf4j
添加⼀个名为 log 的⽇志,使⽤ slf4j
今天的日志学习就到这里啦!下一期进入SpringMVC的学习哦!