1. 得到日志对象
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
//打印日志
@Controller
@ResponseBody//设置当前类中所有方法返回的是数据而不是页面
public class UserController {
//1.通过日志门面得到日志对象
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
SpringBoot内置了日志框架Slf4j ,我们可以直接在程序中调用Slf4j 来输出日志,在程序中获取日志对象需要使用日志工厂LoggerFactory, logger对象是属于org.slf4j包下的
2. 打印日志
package com.example.springboot.Blog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;//打印日志
@Controller
@ResponseBody//设置当前类中所有方法返回的是数据而不是页面
public class UserController {//1.得到日志对象//日志的命名一般以类名来命名UserController.classprivate static final Logger logger =LoggerFactory.getLogger(UserController.class);@RequestMapping("printBlog")public String Hi(){logger.trace("trace");logger.debug("debug");logger.info("info");logger.warn("warn");logger.error("error");return "SpringBoot Blog";}
}
执行程序后
发现只打印了三个。是因为SpringBoot有一个默认级别,当程序中设置了日志级别之后,那么程序只会打印和设置级别相同和大于当前日志级别的日志,小于当前级别的日志不会输出。
3. 日志信息
4. 日志框架(know about)
slf4j是一个日志门面,不是一个真正的日志框架, SLF4J是门面模式的典型应用(但不仅仅使⽤了门面模式),默认调用java的logback日志的实现类。 log4j是一个日志框架。
4.1 门面模式(以前学过的单例模式,工厂模式)
思想:
(a)以开关灯为例,先定义一个顶层接口包含两个抽象方法off()和on()开关灯
(b)定义三个类实现开关灯接口,餐厅、走廊、卧室其中有具体的开关灯实现方法
(c)定义一个门面类,创建餐厅、走廊、卧室的对象,通过调用这些不同对象的实现方法来完成灯的统一关闭和打开
门面模式(FacadePattern)又称为外观模式,提供了⼀个统⼀的接口,用来访问子系统中的⼀群接口. 其主要特征是定义了⼀个高层接口,让子系统更容易使用.
门面模式的优点
• 减少了系统的相互依赖.实现了客⼾端与⼦系统的耦合关系,这使得⼦系统的变化不会影响到调⽤它 的客⼾端;
• 提高了灵活性,简化了客户端对⼦系统的使用难度,客⼾端⽆需关心子系统的具体实现⽅式,⽽只需 要和门面对象交互即可.
• 提高了安全性.可以灵活设定访问权限,不在门面对象中开通方法,就⽆法访问
日志门面直接为程开发者提供服务,开发者不能直接进行日志实现,这样可以解耦合。日志门面相当于中间平台,日志实现的方法可能会不相同,开发者只要通过日志门面就可以统一的使用日志功能
5. 日志级别
⽇志的级别分为:
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认⽇志级别);
warn:警告,不影响使⽤,但需要注意的问题;
error:错误信息,级别较高的错误日志信息, 但仍然不影响系统的继续运行
fatal:致命的, 表示需要立即被处理的系统级错误, 因为代码异常导致程序退出执行的事件。
作用:
快速筛选重要日志: 日志级别可以帮助我们只查看关注的点,日志级别为error, 就可以只看程序的报错日志
System. out.print1n 对比 日志框架的缺点
1.sout打印信息不全(没有打印日志的时间、没有打印日志的来源)
2.不能实现日志打印的隐藏和显示
6.日志级别设置
6.1 设置整个项目的日志级别
logging:
#设置日志级别为debug,可以打印debug及以上的日志级别level:root: debug
root表示根目录,表示整个项目的日志级别
6.2 指定类设置日志级别
设置根目录下com.example.springboot.blog的UserController类的日志级别为error
logging:
#针对不同的目录打印不同的日志级别
com:example:springboot:Blog:UserController:error
7. 日志持久化
以上打印的日志都是在控制台,程序有一旦关闭,日志就会结束打印。因此需要将日志持久化,将日志保存下来(存入磁盘)。
7.1 设置日志的保存目录
可以看见生成了一个日志文件,里面只保存跟日志相关的内容。日志信息是追加的,前面的不会删除。
7.2 设置日志⽂件的⽂件名
# 设置⽇志⽂件的⽂件名
logging:file:name: G:\\IDEA java\\java-ee\\logs\\spring.log
logging.file.name 和logging.file.path 两个都配置的情况下,只生效其⼀,以logging.file.name 为准。
直接只填写日志文件名字的话,日志文件保存在pom.xml文件的同一个目录中
8. 日志文件的分割
#日志文件分割logback:rollingpolicy:#日志分割格式:⽇志分割后的⽂件名格式:⽇志名.⽇期.索引file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i#日志分割条件:达到10kb后就存放到下一个文件中去max-file-size: 10KB
9. 使用@Slf4j注解:更加简单的日志打印
lombok的@Slf4j
直接加上 @ Slf4j注解,会自动帮我们生成日志对象,直接使用即可
@Slf4j注解在源代码编译成字节码文件后, @Slf4j注解消失,但是在类的内部生成
private static final Logger logger = LoggerFactory. getLogger (UserController. class ) 与 @Slf4j注解作用相同