Spring Boot 热部署与日志

本文详细介绍了SpringBoot的热部署原理和配置,包括如何通过spring-boot-devtools依赖实现快速重启,以及其优缺点。同时,文章探讨了日志在开发中的重要性,讲解了日志规范,并深入解析了SpringBoot默认的日志框架slf4j+logback,包括配置日志输出格式和自定义日志配置文件的方法。最后,展示了如何将日志框架切换为log4j2的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、热部署

1.为什么要用热部署

2.热部署的优点和缺点

3.配置过程

二、Spring Boot默认的日志框架

1.为什么使用日志?

2.日志的介绍和规范

3.Spring Boot 默认的日志框架 slf4j+logback

 4.日志的配置

5.自定义日志框架


一、热部署

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中勾选相关配置

   再按住 ctrl+alt+shift+/  registry 勾选,配置完成重启IDEA即可验证

二、Spring Boot默认的日志框架

1.为什么使用日志?

   在项目的开发过程中,我们可以通过 debug来寻找程序问题,但是在线上环境中就只能通过打印程序运行的日志来寻找问题。因此在开发中选择一个好的日志框架是非常重要的。

2.日志的介绍和规范

  日志的框架有多种,但是主要的要记住三种使用方式,slf4j+logback、slf4j+log4j2、jcl+jul ,在使用的时候要注意不可以直接使日志实现框架,需借助日志门面框架使用日志实现。

   jcl是使用类加载器(Class loader)来加载的,先加载到那个日志框架就用那个,在使用自定义类加载器的时候有可能造成内存溢出,使用时较为简单。

  slf4j 是借助适配器桥接器两个功能来实现日志整合的,使用slf4j和logback时他俩之间必须有一个桥接器(loback-classic),适配器的作用如图:

注意:不同日志实现框架对应不同的桥接器依赖

3.Spring Boot 默认的日志框架 slf4j+logback

  slf4j+logback 的依赖在springboot的spring-boot-starter-web依赖中已经存在了,所以不用手动添加依赖了。Logback-class: logback桥接器

 4.日志的配置

  4.1 在yml或者properties文件中配置

#日志的介绍见spring.io logging栏
#日志的组成
 #日期和时间: 毫秒精度,易于排序
 #日志级别:  trace<debug<info<warn<error
 #进程id
 #一个 "---" 分离器来区分实际日志消息的开始
 #线程名称: 用"[]"括起来,里面是线程名(对于控制台输出可能会被截断)
 #记录器名称: 这通常是源类名称(通常缩写)
 #日志消息:
#日志的格式设置  --碰到%/&等特殊符号要用''引起来进行转义,要不会报错
#logging.pattern.console='%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'
 # %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint}
 # %clr(){faint}--指定()内的内容以什么颜色输出 faint(无颜色) 具体颜色见官网
 # %d{}---
 # ${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS} --采用${value: value2}springboot占位符格式 --当value为空,输出value2
 # LOG_DATEFORMAT_PATTERN   系统属性值 对用配置文件中配置属性(官网4.7对映表)
 # %i 索引 当文件超出指定大小后进行的文件索引递增
#日志输出
 #1. name 可以设置日志输出文件的路径+名称(没设路径就在项目的相对路径下)
  #logging.file.name=D:/cc.log
 #2. path 可以设置日志输出文件的路径(没有办法设置名字,默认名字为spring.log)
  #logging.file.path=D:/cc/
#日志的迭代
 # logging.logback.rollingpolicy.file-name-patten   ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
 # ${LOG_FILE}  logging.file.name
 # %d{yyyy-MM-dd}  日期
 # %i 索引,当文件超出指定大小后进行的文件索引递增

    控制台的日志输出格式

4.2 自定义日志配置文件

   Spring Boot只是提供了日志的基本配置,日志框架的一些高级功能没有被列入其中,所以我们可以在项目中配置一份自定义的配置文件,用来使用日志框架提供的高级功能。

   在resources文件下添加一个logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <contextName>sms</contextName>
    <!--设置系统日志目录-->
    <property name="log.path" value="log" />
    <!--最多保留15天log-->
    <property name="log.maxHistory" value="15" />
    <!--日志格式-->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n" />

    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!--输出到文件-->
    <!-- 日志记录器,日期滚动记录 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 正在记录的日志文件的路径及文件名 -->
            <fileNamePattern>${log.path}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <MaxHistory>${log.maxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/debug/debug.%d{yyyy-MM-dd}.log</fileNamePattern>
            <MaxHistory>${log.maxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <root level="debug">
        <!--debug级别输出到文件和控制台-->
        <appender-ref ref="console" />
        <appender-ref ref="file_debug" />
    </root>

    <root level="info">
        <!--info和error级别输出到文件-->
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>
</configuration>

   控制台的日志输出格式

5.自定义日志框架

  在spring boot中不想使用logback日志框架 改用其他框架需要以下几个步骤(以log4j2为例)

  第一步:在pom.xml文件中排除和导入依赖(不排除相应的logback的依赖运行时会出错,如果存在继承关系,也需要早父类依赖中排除spring-boot-starter-logging依赖)

 <!--web启动依赖,包含springMVC的依赖
            用于实现HTTP接口(包含springMVC),使用SpringMVC构建Web应用程序,使用Tomcat作为默认的嵌入式容器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!--排除Starter-logging 排除logback日志依赖-->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--添加log4j2日志依赖  用什么日志就添加什么-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

   第二步:在resources文加下添加一个log4j2.xml文件(因为在yml文件中的日志配置信息是logback的,log4j2无法完全识别,需要从新添加一个配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} ------- %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

   控制台的日志输出结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值