前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、日志是什么?
?志是程序的重要组成部分,想象?下,如果程序报错了,不让你打开控制台看?志,那么你能找到报错的原因吗?
答案是否定的,写程序不是买彩票,不能完全靠猜,因此?志对于我们来说,最主要的?途就是排除和定位问题。
#除了发现和定位问题之外,我们还可以通过?志实现以下功能:
1.记录?户登录?志,?便分析?户是正常登录还是恶意破解?户。
2.记录系统的操作?志,?便数据恢复和定位操作?。
3.记录程序的执?时间,?便为以后优化程序提供数据?持。
4.以上这些都是?志提供的?常实?的功能
二、?志怎么??
Spring Boot 项?在启动的时候默认就有?志输出,如下图所示
这个就是我们说的日志,说明日志在springboot里是内置好的,那么我们应该怎么怎么自定义打印日志呢
三.自定义打印日志
3.1在程序中得到日志对象
在程序中获取?志对象需要使??志?? LoggerFactory,如下代码所示
代码如下(示例):
// 1.得到?志对象 private static Logger logger = LoggerFactory.getLogger(UserController.class );
?志??需要将每个类的类型传递进去,这样我们才知道?志的归属类,才能更?便、更直观的定位到问题类
3.2使用日志打印对象
?志对象的打印?法有很多种,我们可以先使? info() ?法来输出?志,如下代码所示
package com.example.demo.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class LogController { // 1.得到日志对象 private static Logger log = LoggerFactory.getLogger(TestController.class); @RequestMapping("/log") public void log() { String msg = "今天已经周二了。"; log.trace("trace -> " + msg); log.debug("debug -> " + msg); log.info("info -> " + msg); log.warn("warn -> " + msg); log.error("error -> " + msg); } }
package com.example.demo.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; //@Controller //@ResponseBody @RestController @PropertySource(value = "classpath:application.properties", encoding = "utf-8") public class TestController { @Value("${myimage.path}") private String myImage; @RequestMapping("/sayhi") public String sayHi() { System.out.println(LocalDateTime.now() +" 日志 " + "com.example.demo.controller.TestController"); return "你好,Spring Boot -> " + myImage; } }
四.?志级别
4.1日志级别有什么用
1.?志级别可以帮你筛选出重要的信息,?如设置?志级别为 error,那么就可以只看程序的报错?志了,对于普通的调试?志和业务?志就可以忽略了,从?节省开发者信息筛选的时间。
2.?志级别可以控制不同环境下,?个程序是否需要打印?志,如开发环境我们需要很详细的信息,??产环境为了保证性能和安全性就会输?尽量少的?志,?通过?志的级别就可以实现此需求。
4.2 ?志级别的分类与使?
?志的级别分为:
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认?志级别);
warn:警告,不影响使?,但需要注意的问题;
error:错误信息,级别较?的错误?志信息;
fatal:致命的,因为代码异常导致程序退出执?的事件;
五.日志持久化
可以和我这样子配置
是在application.yml里写的,记得要俩个斜扛,一个是转义的
六.lombok
6.1添加lobok依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <optional>true</optional> </dependency>
注意:使? @Slf4j 注解,在程序中使? log 对象即可输??志,并且只能使? log 对象才能输出,
这是 lombok 提供的对象名
6.2lombok原理
lombok 能够打印?志的密码就在 target ?录??,target 为项?最终执?的代码,查看 target ?录,如下
6.3lombok 更多注解说明
注解 作?
@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
总结
今天的博客,希望大佬们能在评论指出错误!~~??