Java EE 进阶:Spring Boot 日志

什么是日志?

日志就是在程序运行的时候记录运行过程中的各种信息,比如系统的运行状态,用户操作,错误信息,调试数据等,就跟你写日记一样,记录各种数据。

日志的使用

常见的日志

Spring Boot在创建时就会记录各种的数据

在以前我们的学习中,我们可以通过sout来打印日志

java 复制代码
System.out.println("sout打印日志");

我们可以发现,我们写的日志,比Spring Boot生成的日志少了很多的信息。

打印日志

我们可以通过如下代码来打印日志

java 复制代码
private final static Logger logger= LoggerFactory.getLogger(LogController.class);

注:logger是属于slf4j包中,切记不要导错包

通过对象来打印日志

java 复制代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/log")
@RestController
public class LogController {
    private final static Logger logger= L

    @RequestMapping("/print")
    public void print(){
        System.out.println("sout打印日志");
        logger.debug("debug 打印日志");
        logger.info("info 打印日志");
        logger.trace("trace 打印日志");
        logger.error("error 打印日志");
        logger.warn("warn 打印日志");
    }
}

但是我们发现我们打印了六种日志,但实际出来的只有三种

这与⽇志级别的配置有关, ⽇志的输出级别默认是info级别,所以只会打印⼤于等于此级别的⽇志,也就 是info, warn和error

门面模式

slf4j是典型的门面模式

门面模式的定义:

提供了一个统一接口,用来访问子系统中的一群接口

门面模式的实现:

java 复制代码
public interface Light {
    void open();

    void close();
}

public class LivingRoomLight implements Light{
    @Override
    public void open() {
        System.out.println("打开客厅灯");
    }

    @Override
    public void close() {
        System.out.println("关闭客厅灯");
    }
}

public class BedRoomLight implements Light{
    @Override
    public void open() {
        System.out.println("打开卧室灯");
    }

    @Override
    public void close() {
        System.out.println("关闭卧室灯");
    }
}

public class BathRoomLight implements Light{
    @Override
    public void open() {
        System.out.println("打开浴室灯");
    }

    @Override
    public void close() {
        System.out.println("关闭浴室灯");
    }
}

public class FacadeClient {
    private BathRoomLight bathRoomLight=new BathRoomLight();
    private BedRoomLight bedRoomLight=new BedRoomLight();
    private LivingRoomLight livingRoomLight=new LivingRoomLight();



    public void open() {
        bathRoomLight.open();
        bedRoomLight.open();
        livingRoomLight.open();
    }


    public void close() {
        bathRoomLight.close();
        bedRoomLight.close();
        livingRoomLight.close();
    }
}

public class Main {
    public static void main(String[] args) {
        FacadeClient facadeClient=new FacadeClient();
        facadeClient.open();
        facadeClient.close();
    }
}

⻔⾯模式的优点:

减少了依赖性,提高灵活性,提高了安全性,灵活的设定权限的访问,不在门面对象中开通方法,就无法访问。

日志格式的说明

日志级别的分类

⽇志的级别从⾼到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE

FATAL:致命信息,表⽰需要⽴即被处理的系统级错误

ERROR:错误信息,级别较⾼的错误⽇志信息,但仍然不影响系统的继续运⾏

WARN:警告信息,不影响使⽤,但需要注意的问题

INFO:普通信息,⽤于记录应⽤程序正常运⾏时的⼀些信息,例如系统启动完成、请求处理完成等

DEBUG:调试信息,需要调试时候的关键信息打印

TRACE:追踪信息,⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)

日志的配置

在配置文件中设置"logging.level"配置项

配置日志的默认级别

java 复制代码
logging:
  level:
    root: debug

配置⽇志⽂件的路径和⽂件名:

java 复制代码
logging:
  file:
    name: logger/springboot.log

配置日志文件的分割

java 复制代码
Logging  
  logback:
    rollingpolicy:
     file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
     max-file-size: 1KB

日志格式的配置:

参考:Chapter 6: Layouts

更加简单的日志打印

@slf4j注解

java 复制代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/log2")
@RestController
@Slf4j
public class LogController2 {

    @RequestMapping("/print2")
    public void print2(){
        System.out.println("sout打印日志");
        log.debug("debug 打印日志");
        log.info("info 打印日志");
        log.trace("trace 打印日志");
        log.error("error 打印日志");
        log.warn("warn 打印日志");
    }
}

注:记得添加lombok依赖

java 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version> <!-- 建议使用较新的版本 -->
    <scope>provided</scope>
</dependency>

希望能对大家有所帮助!!!!

相关推荐
apocelipes17 分钟前
atomic不是免费午餐
java·性能优化·golang·并发
A了LONE28 分钟前
cv弹窗,退款确认弹窗
java·服务器·前端
蔡楚门1 小时前
福彩双色球第2025088期篮球号码分析
java
慕y2741 小时前
Java学习第九十六部分——Eureka
java·学习·eureka
头发那是一根不剩了2 小时前
信创应用服务器TongWeb安装教程、前后端分离应用部署全流程
java·信创·tongweb
22:30Plane-Moon2 小时前
Servlet作用域,监听器,JSP九大内置对象
java·开发语言·servlet
小白(猿)员2 小时前
JVM、JDK、JRE的区别
java·开发语言·jvm
axban3 小时前
QT中删除控件的注意事项、deleteLater和delete的区别
java·数据库·qt
MicoZone3 小时前
JDK源码
java
喜欢敲代码的程序员3 小时前
SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:日志管理(四)集成Spring Security
spring boot·mysql·spring·vue·mybatis