赞
踩
SpringBoot项目在启动的时候默认就有日志输出,如图
以上内容就是 Spring Boot 输出的控制台日志信息
通过上述日志信息我们能发现以下3个问题:
● SpringBoot 内置了日志框架(不然也输出不了日志)
● 默认情况下,输出的日志并非是开发者定义和打印的,那么开发者怎么在程序中自定义打印日志呢?
● 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久保存下来呢?
注意:Logger
对象是属于org.slf4j
包下的,不要导错包
在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory,如下代码所示
⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位
到问题类。
@Controller
public class DemoController {
// 1. 获取日志对象
private static Logger logger = LoggerFactory.getLogger(DemoController.class);
@RequestMapping("/hello") // 路由
@ResponseBody // 返回给浏览器一个接口而非页面
public String getInfo(String str) {
// 2. 使用日志对象的日志打印方法来打印日志
logger.info("########### 执行了 getInfo方法,获取到了query string参数 str="+str+" ###########");
return "hello spring boot "+str;
}
}
浏览器输入url访问
打印日志
因为SpringBoot中内置了日志框架slf4j,所以我们可以直接在代码中调用slf4j输出日志,slf4j是不做任何日志相关的操作的,它只是把任务交给其它人去做,比如直接交给logback去做。
目前主流的实现就是通过slf4j来调用logback,日志门面值赋值对接,真正完成任务的日志实现框架。也就是说slf4j就是一个日志接口,而logback才是接口的实现,真正干活的是logback
因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。
⽇志的级别就是为了筛选符合⽬标的⽇志信息的
有了⽇志级别之后就可以过滤⾃⼰想看到的信息了,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者的信息筛选时间
日志的级别分为
过滤规则:比日志设置级别低的日志就会忽略掉(不显示),级别越高显示的信息越少
代码示例:
@Controller public class DemoController { // 1. 获取日志对象 private static Logger logger = LoggerFactory.getLogger(DemoController.class); @RequestMapping("/hello") // 路由 @ResponseBody // 返回给浏览器一个接口而非页面 public String getInfo(String str) { // 2. 使用日志对象的日志打印方法来打印日志 logger.trace("trace级别"); logger.debug("debug级别"); logger.info("info级别"); logger.warn("warn级别"); logger.error("error级别"); return "hello spring boot "+str; } }
这里是默认的日志级别info,调用结果。比 info级别低的日志不会显示
properties
配置文件
logging.level.root=debug
yml配置文件
logging:
level:
root: error
日志持久化有两种实现方式
通过相对路径或者绝对路径
properties
配置文件
logging.file.path=./src/main/resources/log/
yml
文件
logging:
file:
path: C:/Users/HeHanYu/Desktopcode/Java
logging.file.path=D:/root/test/
logging.file.name=D:/root/test/abc.log
默认情况下 spring boot 会有一个最大的日志大小限制,如果日志的文件大于默认的最大日志大小,那么springboot会重新创建一个日志文件
1.安装 EditStarters插件
选择下载源
搜索 Lombok
每次都使用LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦 ,有⼀
种更好⽤的⽇志输出⽅式,使⽤ lombok 来更简单的输出
下载Lombok插件
一定要下载此插件,不然无法使用 @slf4j
的 log对象
1.添加 lombok 框架⽀持。
2.使⽤ @slf4j 注解输出⽇志。
@Service // 在SpringBoot启动时加载当前类
@Slf4j // 引入日志框架
public class DemoService {
@PostConstruct
public void serviceLost() {
System.out.println();
log.error("通过lombok日志框架+@slf4j日志框架实现更简单日志打印");
System.out.println();
}
}
注意:
使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这
是 lombok 提供的对象名
启动SpringBoot运行结果
lombok 能够打印⽇志的秘密就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如
下
对比上面的Java源代码,发现源代码里并没有写,只有一个 @Slf4j
,就是这个@Slf4j
注解 ,在代码编译期间起到了关键作用,Lombok在编译期间把 Slf4j替换成立相应的字节码文件,所以在 .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 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。