SpringBoot集成slf4j日志和logback.xml配置详解

news2024/11/27 13:33:44

SpringBoot集成slf4j日志和logback.xml配置详解

  • 一、Slf4j概述
  • 二、使用Slf4j打印日志
    • 1.代码方式使用Slf4j
    • 2.lombok使用注解引入@Slf4j
  • 三、项目如何配置logback.xml
    • 1. applicaiton.yml配置
    • 2. 日志级别及优先级
    • 3. logback.xml日志配置文件
    • 4. logback.xml日志配置的实现效果
  • 四、logback.xml配置文件解析
    • 1.定义日志文件的存储地址
    • 2.定义日志格式
      • 普通日志格式
      • 高亮日志格式
    • 3. 定义控制台输出
    • 4. 定义日志文件输出参数
      • 标签:appender
      • 标签:rollingPolicy
      • 标签:timeBasedFileNamingAndTriggeringPolicy
    • 5. 定义日志的输出级别
      • 标签:logger
      • 标签:root
  • 五、测试日志打印效果
    • 1. 日志打印级别的设置效果
    • 2. 日志压缩策略效果
    • 3. 日志清除策略效果

一、Slf4j概述

slf4j,即(Simple Logging Facade for Java,简单门面日志)。它是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,它只服务于各种各样的日志系统。

slf4j提供了统一的记录日志的接口,对不同日志系统的具体实现进行了抽象化,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过绑定具体的日志系统来实现。

比如,一个项目中用到了logback,引入的类库则是使用log4j的,那么是不是要去维护两套日志框架,但是如果类库是使用SLF4J,开发的时候能够继续使用当前的日志框架,因为slf4j能够选择使用哪个实现框架,而不用维护另一套日志框架。

另一个特性是,SLFJ4J在日志打印的时候,使用的占位符的特性。在运行时候,占位符会被某个实际的字符串替换,从而节省新建的String对象,并且能够减少字符串的次数。

二、使用Slf4j打印日志

package com.zhou.test;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 日志测试类
 */
@Slf4j
public class LogTest {

    private static final Logger logger = LoggerFactory.getLogger(LogTest.class);

    public static void logTestOut() {
        for (int i = 0; i < 10000; i++) {
            logger.info("org.slf4j.Logger输出");
            log.info("lombok.extern.slf4j.Slf4j包下日志输出");
        }
    }

    public static void main(String[] args) throws InterruptedException {
        while (true) {
            logTestOut();
            Thread.sleep(5 * 1000);
        }
    }

}

日志输出结果

2023-05-26 10:53:37.072 [main] INFO  com.zhou.test.LogTest - org.slf4j.Logger输出 
2023-05-26 10:53:37.074 [main] INFO  com.zhou.test.LogTest - lombok.extern.slf4j.Slf4j包下日志输出 

1.代码方式使用Slf4j

SpringBoot框架内部已经集成slf4j,因此并不需要引入其他依赖,使用时需要在类中使用LoggerFactory.getLogger(类名.class)可以获取到logger对象

 private static final Logger logger = LoggerFactory.getLogger(LogTest.class);

2.lombok使用注解引入@Slf4j

使用lombok只需要引入依赖后在类上加@Slf4j注解即可直接使用

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

三、项目如何配置logback.xml

1. applicaiton.yml配置

在这里插入图片描述

本测试项目的applicaiton.yml配置如下,指定了logback.xml的路径和指定目录下日志打印的级别

server:
  port: 8083

# 日志配置
logging:
  config: classpath:logback.xml
  level:
    com.zhou.test: info
    org.springframework: warn

logging.config:指定项目启动的时,读取logback.xml日志配置文件
logging.level:配置指定包的路径下应用程序的日志记录和日志级别。

2. 日志级别及优先级

  1. trace(跟踪):一般用来追踪详细的程序运行流,比如程序的运行过程中,运行到了哪一个方法,进入了哪一条分支。通过 trace程序的运行流程,可以判断程序是否按照期望的逻辑在运行
  2. debug(调试 ):这类日志往往用在判断是否有出现bug的场景,且往往记录了代码运行的详细信息,比如方法调用传入的参数信息
  3. info(消息):用来记录程序运行的一些关键信息,它不像trace那样记录程序运行的整个流程,也不像debug那样为了解决问题而记录详细的信息。info记录的是整个系统的运行信息,比如系统运行到了哪一个阶段,到达了哪一个状态
  4. warn(警告):用来记录一些警告信息。警告信息表示,程序进入了一个特殊的状态,在该状态下程序可以继续运行,但是不建议让程序进入该状态,因为该状态可能导致结果出现问题
  5. error(错误):用来记录运行时的错误信息,表示程序运行过程中出现了需要被解决的问题,往往是一些异常。使用error日志的时候,一般会将详细的异常出现的原因记录

日志优先级从高到低依次为trace、debug、info、warn、error。相对而言,打印的日志会越来越少。

3. logback.xml日志配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!-- 应用名称 -->
    <property name="APP_NAME" value="log-test"/>
    <!--定义日志文件的存储地址-->
    <property name="LOG_HOME" value="/logs/${APP_NAME}"/>
    <!-- 定义日志格式  -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
    <!-- 高亮日志格式  -->
    <property name="HIGHLIGHT_PATTERN" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>

    <!-- 控制台输出-高亮 -->
    <appender name="CONSOLE-WITH-HIGHLIGHT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${HIGHLIGHT_PATTERN}</pattern>
        </encoder>
    </appender>

    <!--文件输出的格式设置 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!-- 如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false -->
        <prudent>false</prudent>

        <!-- 日志日常打印日志文件,生成日志示例:/logs/log-test/info.log -->
        <file>${LOG_HOME}/info.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!-- 压缩日志的路径和日志格式,示例:info-2023-05-26_21.log.zip,%d{yyyy-MM-dd}:表示文件名称包含日期,%i:表示当前是第几个压缩文件 -->
            <fileNamePattern>${LOG_HOME}/info-%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern>

            <!-- 如果按天来回滚,则最大保存时间为7天,7天之前的都将被清理掉 -->
            <maxHistory>7</maxHistory>

            <!-- 日志总保存量为10GB,超过该日志总量的最早的日志压缩包会被清除 -->
            <totalSizeCap>10GB</totalSizeCap>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大100MB时会被压缩和切割 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>

        <!-- 文件输出的日志 的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>

    </appender>

    <!-- 日志输出级别 -->
    <logger name="org.springframework" level="INFO"/>
    <logger name="com.zhou.*" level="INFO"/>
    <root level="INFO">
        <appender-ref ref="CONSOLE-WITH-HIGHLIGHT"/>
        <appender-ref ref="FILE"/>
    </root>

</configuration>

4. logback.xml日志配置的实现效果

以下配置生成了日志文件info.log,如果超过了最大设置<maxFileSize>100MB</maxFileSize>,则日志文件会被压缩和切割。如果日志文件总大小超过了<totalSizeCap>10GB</totalSizeCap>,超过该日志总量的最早的日志压缩包会被清除

<!-- 日志日常打印日志文件,生成日志示例:/logs/log-test/info.log -->
 <file>${LOG_HOME}/info.log</file>

在这里插入图片描述

四、logback.xml配置文件解析

1.定义日志文件的存储地址

  <!-- 应用名称 -->
    <property name="APP_NAME" value="log-test"/>
    <!--定义日志文件的存储地址-->
    <property name="LOG_HOME" value="/logs/${APP_NAME}"/>
namevalue作用
APP_NAMElog-test定义当前项目的名称
LOG_HOME/logs/${APP_NAME}定义日志的路径,${APP_NAME}:表示引用上面定义的项目名,最后生成路径为:/logs/log-test/…

2.定义日志格式

普通日志格式

    <!-- 定义日志格式  -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>

name="LOG_PATTERN"表示定义日志格式名称

参数含义
%d表示日期(也可以使用"%date")
%-5level表示级别从左显示5个字符宽度
%thread表示线程名称
%-30.30logger{30}表示如果logger的名称小于30,就“-”指定左对齐;如果其名称长于30字符,就从左边较远输出的字符截掉,保持logger的名字长度最终限制为30个字符
%msg表示日志消息
%n表示换行符

效果如下:

2023-05-26 15:19:28.337 [INFO ] [main] [om.zhou.test.LogTest] Info级别的日志输出
2023-05-26 15:19:28.339 [ERROR] [main] [om.zhou.test.LogTest] Error级别的日志输出

高亮日志格式

   <!-- 高亮日志格式  -->
    <property name="HIGHLIGHT_PATTERN" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>

name="HIGHLIGHT_PATTERN"表示定义日志格式名称

参数含义
%yellow()%green(%highlight()颜色高亮
%d表示日期(也可以使用"%date")
%-5level表示级别从左显示5个字符宽度
%thread表示线程名称
%-30.30logger{30}表示如果logger的名称小于30,就“-”指定左对齐;如果其名称长于30字符,就从左边较远输出的字符截掉,保持logger的名字长度最终限制为30个字符
%msg表示日志消息
%n表示换行符

效果如下:
在这里插入图片描述

3. 定义控制台输出

<!-- 控制台输出-高亮 -->
 <appender name="CONSOLE-WITH-HIGHLIGHT" class="ch.qos.logback.core.ConsoleAppender">
     <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
         <pattern>${HIGHLIGHT_PATTERN}</pattern>
     </encoder>
 </appender>
标签含义
appender负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名
encoder对日志进行格式化
pattern用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“%”进行转义

以上语句通过引用${HIGHLIGHT_PATTERN},使得输出到控制台的格式为高亮日志格式

在这里插入图片描述

4. 定义日志文件输出参数

<!--文件输出的格式设置 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

   <!-- 如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false -->
   <prudent>false</prudent>

   <!-- 日志日常打印日志文件,生成日志示例:/logs/log-test/info.log -->
   <file>${LOG_HOME}/info.log</file>

   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

       <!-- 压缩日志的路径和日志格式,示例:info-2023-05-26_21.log.zip,%d{yyyy-MM-dd}:表示文件名称包含日期,%i:表示当前是第几个压缩文件 -->
       <fileNamePattern>${LOG_HOME}/info-%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern>

       <!-- 如果按天来回滚,则最大保存时间为7天,7天之前的都将被清理掉 -->
       <maxHistory>7</maxHistory>

       <!-- 日志总保存量为10GB,超过该日志总量的日志压缩包会被清除 -->
       <totalSizeCap>10GB</totalSizeCap>

       <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
           <!--文件达到 最大100MB时会被压缩和切割 -->
           <maxFileSize>100MB</maxFileSize>
       </timeBasedFileNamingAndTriggeringPolicy>

   </rollingPolicy>

   <!-- 文件输出的日志 的格式 -->
   <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
       <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
       <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
   </encoder>
   
</appender>

标签:appender

定义一个名为 “FILE” 的文件参数配置,指定appender属性class定义具体的滚动策略类class="ch.qos.logback.core.rolling.RollingFileAppender”。
RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件

标签含义
prudent如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false
file被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值
rollingPolicy当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名
encoder对日志进行格式化
encoder > pattern用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“%”进行转义

标签:rollingPolicy

当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。
属性class定义具体的滚动策略类class=“ch.qos.logback.core.rolling.TimeBasedRollingPolicy”。
TimeBasedRollingPolicy 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责触发滚动。

标签含义
fileNamePattern必要节点,包含文件名及“%d”转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。
maxHistory滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件
totalSizeCap日志总保存量为10GB,超过该日志总量的日志压缩包会被清除

标签:timeBasedFileNamingAndTriggeringPolicy

表示按时间回滚的同时,按文件大小来回滚

<!--文件达到 最大100MB时会被压缩和切割 -->
<maxFileSize>100MB</maxFileSize>

5. 定义日志的输出级别

<!-- 日志输出级别 -->
 <logger name="org.springframework" level="INFO"/>
 <logger name="com.zhou.*" level="INFO"/>
 <root level="INFO">
     <appender-ref ref="CONSOLE-WITH-HIGHLIGHT"/>
     <appender-ref ref="FILE"/>
 </root>

标签:logger

仅有一个name属性,一个可选的level和一个可选的additivity属性

  • 属性name: 用来指定受此logger约束的某一个包或者具体的某一个类
  • 属性level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别
  • 属性additivity: 是否向上级logger传递打印信息。默认是true。同一样,可以包含零个或多个元素,标识这个appender将会添加到这个logger

标签:root

root也是logger元素,但是它是根loger并且只有一个level属性,可以包含零个或多个元素,标识这个appender将会添加到这个loger
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG

五、测试日志打印效果

1. 日志打印级别的设置效果

设置root节点的level=“trace”,效果如下:
在这里插入图片描述

设置root节点的level=“error”,效果如下:
在这里插入图片描述

2. 日志压缩策略效果

在这里插入图片描述

3. 日志清除策略效果

设置压缩包大小超过10MB后自动清理
在这里插入图片描述
当前压缩包共占用9.77MB,当超过10MB时,日志文件名中‘_0’的日志包被删除
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Coremail与中科曙光达成战略合作 紧抓数字经济大机遇

5月12日&#xff0c;广东盈世计算机科技有限公司&#xff08;以下简称&#xff1a;Coremail&#xff09;与曙光信息产业股份有限公司&#xff08;以下简称&#xff1a;中科曙光&#xff09;正式签约合作协议、达成战略合作伙伴关系。 Coremail技术副总裁林延中、中科曙光副总裁…

【高级语言程序设计(一)】第 10 章:文件

目录 一、文件概述 &#xff08;1&#xff09;文件定义 &#xff08;2&#xff09;文件命名 &#xff08;3&#xff09;文件分类 ① 按照文件的内容划分 ② 按照文件的组织形式划分 ③ 按照文件的存储形式划分 ④ 按照文件的存储介质划分 &#xff08;4&#xff09;文…

vulnhub dc-7

1.信息搜集 端口 22,80 存活主机 192.168.85.134 2.访问网站进行信息搜集 发现提示信息&#xff0c;大体意思&#xff0c;有一个新概念&#xff0c;爆破可能失败&#xff0c;跳出框思考 cms&#xff1a;drupal 8.0 msf尝试利用失败 3.对网站进行渗透测试 尝试弱口令 失败 试出…

MapReduce实现KNN算法分类推测鸢尾花种类

文章目录 代码地址一、KNN算法简介二、KNN算法示例&#xff1a;推测鸢尾花种类三、MapReduceHadoop实现KNN鸢尾花分类&#xff1a;1. 实现环境2.pom.xml 3.设计思路及代码1. KNN_Driver类2. MyData类3. KNN_Mapper类 4. KNN_Reducer类 代码地址 https://gitcode.net/m0_567453…

企企管理云是什么应用?如何自动同步数据至企企管理云

企企管理云是什么应用&#xff1f; 企企管理云&#xff0c;是企企科技依托创始团队30年企业级管理软件实践与服务经验&#xff0c;坚持技术和产品立业&#xff0c;逐步构建的企业经营管理一站式服务平台。企企管理云围绕「现代服务业」的业财一体化&#xff0c;聚焦于项目管理…

Sui网络更新计划

Sui主网已经上线&#xff0c;接下来一段时间&#xff0c;我们计划将对Sui网络每两周进行一次迭代。待网络稳定后&#xff0c;我们将减缓迭代的频率。 为了网络稳定切换&#xff0c;每个版本都有其分支&#xff0c;大多数情况下是两个实时分支&#xff0c;一个用于当前的主网版…

如何在华为OD机试中获得满分?Java实现【任务混部】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 公司创新实验室正在研究…

如何清理harbor的磁盘空间

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 registry garbage-collectharbor自带的清理工具docker image prune -a…

Flume系列:Flume通道拓扑结构

目录 Apache Hadoop生态-目录汇总-持续更新 1: 基础架构 2&#xff1a;简单串联 3&#xff1a;复制(Replicating)和多路复用(Multiplexing) 4&#xff1a;负载均衡和故障转移 5&#xff1a;聚合 Apache Hadoop生态-目录汇总-持续更新 系统环境&#xff1a;centos7 Java环境…

字符串---第一部分 序列、字串;上升,公共

第一部分 最长上升子序列&#xff0c;最长上升子串&#xff0c;最长公共子序列&#xff0c;最长公共子串--dp 第二部分 KMP&#xff0c;trie&#xff0c;双指针 第三部分 待定 动态规划&#xff1a;审题&#xff0c;状态确定&#xff0c;状态转移&#xff0c;边界条件 线性…

Redis客户端介绍

Redis客户端 命令行客户端 redis安装完成后有自带的命令行客户端&#xff0c;即redis-cli&#xff0c;使用方式如下 redis-cli [options][commonds]options——参数 -h 127.0.0.1&#xff1a;指定要连接的redis节点的ip地址&#xff0c;默认值127.0.0.1-p 6379&#xff1a;指…

[中间件漏洞]nginx漏洞复现

目录 文件解析漏洞 原理分析 复现过程 防御方法 目录遍历漏洞 原理分析 复现过程 防御方法 空字节代码执行漏洞 复现过程 防御方法 整数溢出漏洞&#xff08;CVE-2017-7529&#xff09; 复现过程 防御方法 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09; 复现过程 防…

学习笔记 | 基于大模型的优质 Prompt 开发课

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 手把手带你构建高质量 Prompt&#xff0c;掌握以文心一言为代表的大模型对话技巧与高级用法&#xff0c;与大模型高效交流从而释放大模型强大的生成能…

震坤行平台商品详情页面数据

震坤行&#xff08; &#xff08;zkh.com&#xff09; 商品详情页面数据通常包括以下信息&#xff1a; 商品名称、型号、品牌、颜色、大小等基本属性商品主图和详细图集&#xff0c;包括多角度展示、细节展示等商品描述&#xff0c;包括功能介绍、使用方法、注意事项等商品价格…

如何在华为OD机试中获得满分?Java实现【简单的解压缩算法】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 现需要实现一种算法,能…

Python解析excel之Android多语言支持

最新车企给了一份多语言的翻译表&#xff0c;需要进行多语言支持&#xff0c;像下面这样 针对这种文件&#xff0c;我们肯定不能一个个字符串取拷贝&#xff0c;很容易出错&#xff0c;所以想用python取处理这个表格然后生成对应的string文件. 1.首先我们建立好string的文件夹…

手写简单的RPC框架(一)

一、RPC简介 1、什么是RPC RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用协议&#xff0c;一种通过网络从远程计算机上请求服务&#xff0c;而不需要了解底层网络技术的协议。RPC它假定某些协议的存在&#xff0c;例如TPC/UDP等&#xff0c;为通信程序之间携…

【P33】JMeter 临界部分控制器(Critical Section Controller)

文章目录 一、临界部分控制器&#xff08;Critical Section Controller&#xff09;参数说明二、测试计划设计 一、临界部分控制器&#xff08;Critical Section Controller&#xff09;参数说明 可以对指定代码块增加同步锁&#xff0c;确保此代码块由单线程执行&#xff1b;…

【C++】初入C++

认识C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(object orient…

Gap业绩逆转,宝尊电商是如何当好“全球品牌数字商业伙伴”的?

电商永不眠。技术、消费趋势、供应链&#xff0c;任何一个因素都可以引起商业格局的巨变。一些看似普通的事件落到一个品牌身上&#xff0c;往往会带来改变命运的巨大变化。就像今年2月&#xff0c;宝尊官宣已完成对Gap大中华区的收购&#xff0c;到现在&#xff0c;Gap便已在宝…