3_springboot热部署与日志

目录

一、热部署

1.为什么要用热部署

2.热部署的优点和缺点

3.配置过程

第一步:添加热部署依赖

第二步:在IDEA中勾选相关配置

2、SpringBoot日志简介

2.1、门面

2.2、门面日志

2.2.1、log4j的门面日志

2.2.2、jul的门面日志

2.3、统一日志

3、SpringBoot日志集成

3.1、SpringBoot默认日志集成

3.2、SpringBoot日志使用

日志级别

3.3、SpringBoot日志格式

3.3.1、日志格式介绍

3.3.2、修改日期格式

3.3.3、参数细讲

3.4、日志输出到文件

3.5、SpringBoot日志归档

3.6、SpringBoot日志自定义配置文件

3.7、SpringBoot切换日志框架


一、热部署

1.为什么要用热部署

        进一步提高开发效率,spring boot为我们提供了全局项目热部署,日后在开发过程中,修改了部分代码以及相关的配置文件,不再需要重新启动项目,热部署就会在项目中更新启动修改部分的代码。

2.热部署的优点和缺点

优点: 在修改代码的时候不用手动重启代码,提高了开发效率

缺点: 热部署只适合在本地开发时使用,正式发布不可以使用

3.配置过程

第一步:添加热部署依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<!--optional=true,依赖不会传递,该项目依赖devtools;之后
依赖boot项目的项目如果想要使用devtools,需要重新引入-->
<optional>true</optional>
</dependency>

第二步:在IDEA中勾选相关配置

 

image-20220821112358470

2、SpringBoot日志简介

2.1、门面

现在市场上有主要的两大门面,一个是JCL,一个是slf4j,Spring默认的是JCL,但是slf4j比JCL更加强大。

slf4j有两大重点

桥接器:每一个日志系统需要使用时,得有一个中间者,叫桥接器。

适配器:我们系统中已有的日志框架,转换成slf4j的形式,就用到了适配器。

2.2、门面日志

2.2.1、log4j的门面日志

1、引入依赖

<!-- log4j日志核心依赖 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>

<!-- slf4j 的核心依赖 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.31</version>
</dependency>

<!-- 添加slf4j  log4j的桥接器 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.31</version>
</dependency>

2、引入log4j.properties配置文件

log4j.rootLogger=trance, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

3、测试类,注意引入的包

package com.tulingxueyuan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4jMain {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Log4jMain.class);
logger.info("log4j日志");
    }
}

2.2.2、jul的门面日志

1、引入pom依赖

<!-- 引入JCL门面依赖 -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>

2、测试类,注意引入的包

package cool.ale;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class JulMain {
public static void main(String[] args) {
Log log = LogFactory.getLog(JulMain.class);
log.info("JCL日志");
    }
}

3、如果直接运行的话,我们打印的日志还是log4j,因为JCL动态查找机制进行日志实例化,执行顺序为:commons-logging.properties—>系统环境变量—>log4j—>jul—>simplelog—>nooplog。这个时候我们可以指定一个JCL的配置文件commons-logging.properties,内容如下:

org.apache.commons.logging.Log = org.apache.commons.logging.impl.Jdk14Logger

2.3、统一日志

当我们的系统出现两种或两种以上的日志时,我们可以统一日志实现,引入如下jar包即可。

<!-- 为了统一日志实现,将JCL转化到SLF4J
添加JCL-SLF4J的适配器
-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.30</version>
</dependency>

3、SpringBoot日志集成

3.1、SpringBoot默认日志集成

SpringBoot底层使用slf4j+logback的方式进行日志记录。

3.2、SpringBoot日志使用

  • 日志级别

trace,debug,info,warn,error,fatal,off

我们首先需要定义一个日志记录器,注意一定要引入slf4j的包,在SpringBoot的启动类中测试,测试代码如下:

package cool.ale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
// 声明一个日志记录器
static Logger logger = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
logger.trace("跟踪");
logger.debug("调试");
logger.info("信息");
logger.warn("警告");
logger.error("异常");

当我们运行之后,通过看控制台,发现日志的默认级别是INFO,如下所示:

我们可以在application.yml文件中修改配置,如下所示修改某个包的日志级别,修改的是com.tulingxueyuan包:

3.3、SpringBoot日志格式

3.3.1、日志格式介绍

示例,以上面的图示为例:

日志数据

格式说明

2022-11-05 19:57:21.797

日期和时间,毫秒精度,易于排序

trace,debug,info,warn,error,fatal,off

日志级别

9780

进程ID

---

日志配置文件中配置的静态格式

[ main]

线程的名字,main代表主线程

c.t.SpringbootLoggingApplication

记录日志的类的包名称缩写加上类名称

跟踪

我们输出的信息

3.3.2、修改日期格式

我们可以在application.yml文件中根据配置修改,当我们yml的配置文件%等参数,需要用单引号包起来

logging: pattern: console: '%d{yyyy/MM/dd-HH:mm:ss}'

3.3.3、参数细讲

根据以上的日志格式,我们讲几个参数:

1、日期定参输出 %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-mm-dd HH:mm:ss.SSS}}){faint}

1.1、首先%clr    {faint} 代表这段日志输出的颜色,{faint}代表没有颜色

1.2、(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-mm-dd HH:mm:ss.SSS}})

括号中代表需要输出的内容,先去我们的系统环境变量中找LOG_DATEFORMAT_PATTERN参数,如果没有找到,则以yyyy-mm-dd HH:mm:ss.SSS输出系统时间,然而LOG_DATEFORMAT_PATTERN也可以通过在application.yml中去配置,如下所示:

logging:
    pattern:
        dateformat: -yyyy-MM-dd

1.3、%d{${-yyyy-mm-dd HH:mm:ss.SSS}}:%d是logback的一种日期输出格式,

-yyyy-mm-dd HH:mm:ss.SSS是真正的格式。

2、分级别输出%clr({${LOG_LEVEL_PATTERN:-%5p}})

2.1、输出每个日志级别,就比如TRACE,DEBUG,INFO,WARN,ERROR,FATAL或OFF,不用特意去设置颜色,每个日志级别会有默认的颜色

2.2、-%5表示右对齐,一共站5个字符。

2.3、p代表输出日志的级别。

3、%clr({${PID:–%5p}}){magenta}

{${PID:–%5p}}:从系统中去取进程ID也仅仅是取出了进程id

3.4、日志输出到文件

SpringBoot以文件输出日志的方式有两种,我们可以在application.yml配置文件里面配置,如下所示:

logging: file: #name: log.log path: D:/

1、logging.file.name 可以指定文件名,也可以指定一个物理路径,如果直接指定了文件名,日志默认将生成在项目的相对路径下。

2、logging.file.path 不可以指定文件名,需要指定一个物理路径,默认的日志名称为为:spring.log

3.5、SpringBoot日志归档

logging.logback.rollingpolicy.file-name-pattern配置

默认的格式如下:

${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

${LOG_FILE}对应 logging.file.name

%d{yyyy-MM-dd} 年-月-日

%i索引,当文件超出指定大小之后进行文件索引的递增

当我们设置如下配置:

logging:
    file:
        name: D:/logs/log.log
        max-size: 5KB

超过5KB后,就会产生如下效果:

3.6、SpringBoot日志自定义配置文件

注意:

如果使用了自定义的日志配置文件,application.yml中的日志配置将失效。

如果使用了类似于springProfiles这种配置,就必须将日志文件的文件名称改为:logback-spring.xml,因为springProfiles是SpringBoot提供的,logback.xml文件只会让logback.xml加载,而logback-spring.xml则会被SpringBoot和logback同时加载。

配置文件中自定义变量

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 配置变量 -->
<springProperty scope="context" name="dateFormat" source="logging.pattern.dateformat"
defaultValue="-yyyy-MM-dd HH:mm:ss.SSS"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- {100} 当前可输出 100 个字符 -->
<pattern>%d{${dateFormat}} [%thread] %-5level %logger{100} - %msg%n</pattern>
</encoder>pro
</appender>
<!-- 可以更细粒度的控制日志输出 -->
<logger name="com.tulingxueyuan" level="trace"></logger>
<!-- 根目录的日志级别 -->
<root level="error">
<appender-ref ref="STDOUT" />
</root>
</configuration>

3.7、SpringBoot切换日志框架

我们需要在pom文件中写上如下配置,因为SpringBoot在和日志框架配合时,只能有一个桥接器,所以当我们加上其它的框架配置时,需要移除掉web-starter给我们提供的默认日志框架桥接器,具体如下所示:

分为以下三个步骤:

1、去除logback自带的桥接器

2、加上需要切换日志框架的桥接器

3、加上相应的日志配置文件

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除掉 starter-logging 也就是logback的依赖 -->
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- log4j2的场景启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

显示依赖项

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉鱼的字符串

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值