七、SpringBoot日志

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.class
    private 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注解作用相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值