当前位置:   article > 正文

SpringBoot日志_springboot控制台输出日志

springboot控制台输出日志


1.日志文件有什么用?

  1. 快速定位和排查问题
  2. 记录用户信息
  3. 记录操作信息,帮你恢复数据或定位到责任人
  4. 记录程序的执行时间,方便以后优化程序提供数据支持

2.如何使用日志?

SpringBoot项目在启动的时候默认就有日志输出,如图

在这里插入图片描述
以上内容就是 Spring Boot 输出的控制台日志信息
通过上述日志信息我们能发现以下3个问题:
● SpringBoot 内置了日志框架(不然也输出不了日志)
● 默认情况下,输出的日志并非是开发者定义和打印的,那么开发者怎么在程序中自定义打印日志呢?
● 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久保存下来呢?

3.自定义日志的打印步骤

  1. 在程序中获取到日志对象
  2. 调用日志对象的打印方法,将信息打印出来

注意: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;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

浏览器输入url访问

在这里插入图片描述
打印日志

在这里插入图片描述

常见的日志框架

因为SpringBoot中内置了日志框架slf4j,所以我们可以直接在代码中调用slf4j输出日志,slf4j是不做任何日志相关的操作的,它只是把任务交给其它人去做,比如直接交给logback去做。

目前主流的实现就是通过slf4j来调用logback,日志门面值赋值对接,真正完成任务的日志实现框架。也就是说slf4j就是一个日志接口,而logback才是接口的实现,真正干活的是logback

因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。

日志的格式

在这里插入图片描述

4.日志级别

日志级别的作用

⽇志的级别就是为了筛选符合⽬标的⽇志信息的
有了⽇志级别之后就可以过滤⾃⼰想看到的信息了,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者的信息筛选时间

日志级别的分类与使用

日志的级别分为

  • trace::微量,少许的意思,级别 最低
  • info:普通的打印信息
  • debug:需要调试的时候关键信息打印
  • warn:警告,不影响使用,但需要注意的问题
  • error:错误信息,级别较高的错误日志信息
  • fatal:致命的,因为代码异常导致程序退出执行的事件

过滤规则:比日志设置级别低的日志就会忽略掉(不显示),级别越高显示的信息越少
在这里插入图片描述
代码示例:

@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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这里是默认的日志级别info,调用结果。比 info级别低的日志不会显示

在这里插入图片描述

日志级别设置

properties配置文件

logging.level.root=debug
  • 1

yml配置文件

logging:
  level:
    root: error
  • 1
  • 2
  • 3

5.日志持久化

日志持久化有两种实现方式

设置日志的保存路径

通过相对路径或者绝对路径
properties配置文件

logging.file.path=./src/main/resources/log/
  • 1

yml文件

logging:
  file:
    path: C:/Users/HeHanYu/Desktopcode/Java
  • 1
  • 2
  • 3

设置日志的保存文件名

logging.file.path=D:/root/test/
logging.file.name=D:/root/test/abc.log
  • 1
  • 2

默认情况下 spring boot 会有一个最大的日志大小限制,如果日志的文件大于默认的最大日志大小,那么springboot会重新创建一个日志文件

6. 更简单的日志输出(lombok )

1.安装 EditStarters插件
在这里插入图片描述

  1. 在pom.xml文件中右击鼠标

在这里插入图片描述

  1. 点击插件

在这里插入图片描述

  1. 选择下载源
    在这里插入图片描述

  2. 搜索 Lombok
    在这里插入图片描述
    每次都使用LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦 ,有⼀
    种更好⽤的⽇志输出⽅式,使⽤ lombok 来更简单的输出

  3. 下载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();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注意:
使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这
是 lombok 提供的对象名

启动SpringBoot运行结果

在这里插入图片描述

7. Lombok原理

lombok 能够打印⽇志的秘密就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如

对比上面的Java源代码,发现源代码里并没有写,只有一个 @Slf4j,就是这个@Slf4j注解 ,在代码编译期间起到了关键作用,Lombok在编译期间把 Slf4j替换成立相应的字节码文件,所以在 .class文件里没有@Slf4j注解

在这里插入图片描述

在这里插入图片描述

8. lombok 更多注解说明

注解作用
@Getter自动动添加 getter 方法
@Setter自动添加 setter方法
@ToString自动添加 toString 方法
@EqualsAndHashCode自动添加 equals和hashCode方法
@NoArgsConstructor自动添加无参构造方法
@AllArgsConstructor自动添加全属性构造方法,顺序按照属性的定义顺序
@NonNull属性不能为 null
@RequiredArgsConstructor自动添加必须属性的构造方法, final + @NonNull 的属性为必须

组合注解

注解作用
@Data@Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/643049
推荐阅读
相关标签
  

闽ICP备14008679号