一文搞定SpringBoot中日志框架使用

news2024/9/22 21:22:08

文章目录

  • Spring Boot 对日志框架的封装
  • SLF4J + Logback快速入门
  • 调试模式
  • Logback 扩展
  • SLF4J + Log4J2

Spring Boot 对日志框架的封装

我们知道在日志方面,SpringBoot默认是使用的SLF4J+LogBack的形式。我们来看看它使用的日志实现框架LogBack,其在 DefaultLogbackConfiguration 类中,定义了文件日志格式如下:

// DefaultLogbackConfiguration.java

private static final String FILE_LOG_PATTERN = "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} "
		+ "${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}";

日志输出示例如下:

2023-07-10 21:42:58.925  INFO 7000 --- [           main] com.zyb.MyApplication                    : No active profile set, falling back to default profiles: default
2023-07-10 21:42:59.473  INFO 7000 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-07-10 21:42:59.479  INFO 7000 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]

文件日志格式解释:

  • %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} 日期和时间:毫秒精度。
  • ${LOG_LEVEL_PATTERN:-%5p} 日志级别:ERROR、WARN、INFO、DEBUG 或 TRACE。
  • ${PID:- } 进程 ID。
  • --- 分隔符:用于区分实际日志内容的开始。
  • [%t] 线程名称:在方括号中(可能会截断控制台输出)。
  • %-40.40logger{39} 日志记录器名称:这通常是源类名称(通常为缩写)。
  • %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} 日志内容。

同时,允许通过 logging. 配置项来,进行自定义设置。例如说:

自定义日志格式

  • logging.pattern.file :文件的日志格式。
  • logging.pattern.console :控制台的日志格式。
  • logging.pattern.dateformat :日期和时间。
  • logging.pattern.level :日志级别。
  • logging.pattern.pid : 进程 ID。
  • logging.exception-conversion-word :记录异常时使用的转换字

自定义日志文件

  • logging.file.max-history :日志文件要保留的归档的最大天数。
  • logging.file.max-size :日志文件的最大大小。
  • logging.file :日志文件名。
  • logging.path :日志文件路径。

自定义日志级别

logging.level.* :日志等级,通过使用 logging.level.<logger-name>=<level> 来设置。例如说:

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

最主要的是我们可以使用logging.config定义日志框架使用的配置文件地址。因为根据不同的日志实现框架,Spring Boot 按如下“约定规则”加载配置文件:

  • Logback :对应 logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy 配置文件。
  • Log4j2 :对应 log4j2-spring.xml、log4j2.xml 配置文件。
  • JUL :对应 logging.properties 配置文件。

这里的配置文件名根据SpringBoot的版本问题可能不同,例如在SpringBoot2.5.0版本中,logback-spring.xml不管用,但是logback.xml是可行的。

虽然 logging. 自定义配置项很多,但是一般情况下,我们只使用 logging.level.* 配置项,设置不同 Logger 的日志级别。也就是说我们主要的配置还是写在配置文件中。

目前,Spring Boot 内置了两个日志相关的 Starter :

  • spring-boot-starter-logging :使用 SLF4J + Logback 的组合。
  • spring-boot-starter-log4j2 :使用 SLF4J + Log4j2 的组合。

接下来我们来进行 Spring Boot 集成日志功能的快速入门,使用 SLF4J + Logback 的组合。主要功能包括:

  • 控制台打印日志。
  • 控制台颜色输出。
  • 日志文件打印日志。
  • 自定义日志级别。

SLF4J + Logback快速入门

依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-starter-web 包含了 spring-boot-starter ,而 spring-boot-starter 又已经包含了 spring-boot-starter-logging

配置文件

在 application.yml 中,添加日志相关配置,如下:

spring:
  application:
    name: just_do_it # 应用名

logging:
  # 日志文件配置
  file:
#    path: /Users/yunai/logs/ # 日志文件路径。
    name: ./logs/${spring.application.name}.log # 日志文件名。
    max-history: 7 # 日志文件要保留的归档的最大天数。默认为 7 天。
    max-size: 10MB # 日志文件的最大大小。默认为 10MB 。

  # 日志级别
  level:
    com:
      zyb:
        controller:
          LoggerController: DEBUG

解释一下这个配置文件:

①在 logging.file.* 配置项下,设置 Spring Boot 日志文件

默认情况下,Spring Boot 日志只会打印到控制台。所以需要通过 logging.file.path 或 logging.file.name 配置项来设置。不过要注意,这两者是二选一,并不是共同作用。

  • logging.file.name :日志文件全路径名。可以是相对路径,也可以是绝对路径。这里,我们设置为 “/Users/yunai/logs/${spring.application.name}.log” ,绝对路径。
  • logging.file.path :日志文件目录。会在该目录下,创建 spring.log 日志文件。例如说:/Users/yunai/logs/ 。
  • 上述两者都配置的情况下,以 logging.file.name 配置项为准。

②在 logging.level.* 配置项,设置自定义的日志级别。

Spring Boot 定义的日志级别为 TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。

默认情况下,控制台和日志文件的日志级别 INFO。即,INFO、WARN、ERROR 级别的日志,都会记录到控制台和日志文件中。

可以通过使用 logging.level.<logger-name>= 配置项,自定义 Logger 对应的日志级别。这里,我们设置了名字为 “cn.iocoder.springboot.lab37.loggingdemo.controller” 的 Logger 的日志级别,为 DEBUG 。

如果我们的控制台支持 ANSI ,则可以使用颜色输出,来提高可读性。通过 spring.output.ansi.enabled 配置项,设置 ANSI 功能的状态,有三种选项:

  • ALWAYS :启用 ANSI 颜色的输出。
  • NEVER :禁用 ANSI 颜色的输出。
  • DETECT :自动检测控制台是否支持 ANSI 功能。如果支持则进行开启,否则则进行禁用。默认情况下,使用 DETECT 这种选项。

默认情况下,Spring Boot 已经配置好颜色输出的日志格式,我们并不需要做自定义,所以这里也就不多做介绍了。我们只需要知道,不同日志级别,对应不同的颜色的映射关系即可:
在这里插入图片描述

接下来我们写一个Controller测试一下:

@RestController
@RequestMapping("/log")
public class LoggerController {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @GetMapping("/debug")
    public void debug() {
        logger.debug("debug");
    }

    @GetMapping("/info")
    public void info() {
        logger.info("info");
    }

    @GetMapping("/error")
    public void error() {
        logger.error("error");
    }
}

在这里插入图片描述

我们文件输出日志也有:
在这里插入图片描述

调试模式

默认情况下,Spring Boot 只会记录 ERROR、WARN 和 INFO 级别的日志。可能有时我们启动 Spring Boot 失败时,需要通过启动 Spring Boot 调试模式:

  • 让核心 Logger(内嵌容器、Hibernate 和 Spring Boot 等等)打印 DEBUG 级别的日志,方便排查原因
  • 应用中的其它 Logger 还是保持原有的日志级别。

目前,有两种方式开启 Spring Boot 应用的调试模式:

  • 通过启动参数带上 --debug 标识,进行开启。例如说 $ java -jar myapp.jar --debug。
  • 通过配置文件的 debug = true 配置项,进行开启。
spring:
  application:
    name: just_do_it # 应用名

logging:
  # 日志文件配置
  file:
    name: ./logs/${spring.application.name}.log # 日志文件名。
    max-history: 7 # 日志文件要保留的归档的最大天数。默认为 7 天。
    max-size: 10MB # 日志文件的最大大小。默认为 10MB 。

# 调试模式
debug: true

Logback 扩展

Spring Boot 额外提供了 Logback 的两个 XML 标签的扩展。

① 拓展一:<springProfile /> 标签

通过 <springProfile /> 标签,设置标签内的 Logback 的配置,需要符合指定的 Spring Profile 才可以生效。

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev | staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

② 拓展二:<springProperty /> 标签

通过 <springProperty /> 标签,可以从 Spring Boot 配置文件中读取配置项。示例如下:

<!-- 从 Spring Boot 配置文件中,读取 spring.application.name 应用名 -->
<springProperty name="applicationName" scope="context" source="spring.application.name" />
<!-- 日志文件的路径 -->
<property name="LOG_FILE" value="/Users/yunai/logs/${applicationName}.log"/>

接下来我们进行演示

依赖不变,application.yml中只保留一个应用名的配置即可:

spring:
  application:
    name: just_do_it

然后开始编写我们的日志配置文件;

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

<configuration>

    <!-- <1> -->
    <!-- 引入 Spring Boot 默认的 logback XML 配置文件  -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!-- <2.1> -->
    <!-- 控制台 Appender -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志的格式化 -->
        <encoder>
            <!--直接使用的默认格式-->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- 2.2 -->
    <!-- 从 Spring Boot 配置文件中,读取 spring.application.name 应用名 -->
    <springProperty name="applicationName" scope="context" source="spring.application.name" />
    <!-- 日志文件的路径 -->
    <property name="LOG_FILE" value="/Users/yunai/logs/${applicationName}.log"/><!-- 滚动日志文件 Appender -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--指定了日志文件的输出路径-->
        <file>${LOG_FILE}</file>
        <!--滚动策略,基于时间 + 大小的分包策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <!-- 日志的格式化 -->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- 3.1 -->
    <!-- 测试环境,独有的配置 -->
    <springProfile name="dev">
        <!-- 设置 Appender -->
        <root level="INFO">
            <appender-ref ref="console"/>
        </root>

        <!-- 设置 "cn.iocoder.springboot.lab37.loggingdemo" 的 Logger 的日志级别为 DEBUG -->
        <logger name="cn.iocoder.springboot.lab37.loggingdemo" level="DEBUG"/>
    </springProfile>

    <!-- 3.2 -->
    <!-- 生产环境,独有的配置 -->
    <springProfile name="prod">
        <!-- 设置 Appender -->
        <root level="INFO">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
    </springProfile>

</configuration>

如果对LogBack配置文件不是很熟悉,可以看我的上一篇文章:
一文弄懂Java日志框架

然后我们编写一个启动类:

@SpringBootApplication

public class MyApplication  {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyApplication.class);

    public static void main(String[] args) {

        SpringApplication.run(MyApplication.class,args);

        LOGGER.debug("在开发环境下可以看到");
    }
}

通过 IDEA 的 Active profiles 选项,设置启动的 Spring Boot 应用的 Profile 。如下图所示:
在这里插入图片描述
运行结果如下:
在这里插入图片描述

而如果是在生产环境下,我们是看不到这句话的。

SLF4J + Log4J2

引入依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<!--排除logback-->
		<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>

在 application.yml 中,仅添加应用名的配置即可,如下:

spring:
  application:
    name: just_do_it

然后我们在 log4j2-spring.xml 中,添加 Log4j2 配置,如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="PID">????</Property>
        <Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
        <Property name="LOG_LEVEL_PATTERN">%5p</Property>
        <Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
        <!-- 1.1 -->
        <Property name="FILE_LOG_BASE_PATH">/Users/yunai/logs</Property>
        <Property name="APPLICATION_NAME">demo-application</Property>

        <!-- 1.2 -->
        <!-- 控制台的日志格式 -->
        <Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
        <!-- 1.3 -->
        <!-- 日志文件的日志格式 -->
        <Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
    </Properties>

    <Appenders>
        <!-- 2.1 -->
        <!-- 控制台的 Appender -->
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
        </Console>

        <!-- 2.2 -->
        <!-- 日志文件的 Appender -->
        <RollingFile name="File" fileName="${FILE_LOG_BASE_PATH}/${sys:APPLICATION_NAME}"
                     filePattern="${FILE_LOG_BASE_PATH}/${sys:APPLICATION_NAME}-%d{yyyy-MM-dd-HH}-%i.log.gz">
            <!-- 日志的格式化 -->
            <PatternLayout>
                <Pattern>${sys:FILE_LOG_PATTERN}</Pattern>
            </PatternLayout>
            <!--滚动策略,基于时间 + 大小的分包策略 -->
            <Policies>
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- 3.1 -->
        <!-- 常用组件的 Logger 的日志级别 -->
        <Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
        <Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
        <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
        <logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
        <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
        <Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
        <Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
        <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>

        <!-- 3.2 -->
        <!-- 自定义的 Logger 的日志级别 -->
        <logger name="com.zyb" level="debug"/>

        <!-- 3.3 -->
        <!-- 设置 Appender ,同时 ROOT 的日志级别为 INFO -->
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="File" />
        </Root>
    </Loggers>
</Configuration>

如果对log4j2的配置文件不是很熟悉,同样可以看我的上一篇文章:
一文弄懂Java日志框架

  • 参考 Spring Boot 默认的 log4j2 XML 配置文件 log4j2-file.xml,进行修改
  • <1.1> 处,定义日志文件的基础路径和文件名。因为 Spring Boot 并未提供 Log4j2 拓展,无法像「7. Logback 拓展」一样直接读取 Spring Boot 配置文件,所以这里我们只能直接定义。
  • <1.2> 处,定义了控制台的日志格式。
  • <1.3> 处,定义了日志文件的日志格式。
  • <2.1> 处,配置控制台的 Appender 。
  • <2.2> 处,配置日志文件的 Appender。
  • < 3.1> 处,设置常用组件的 Logger 的日志级别。
  • < 3.2> 处,自定义的 Logger 的日志级别。这里,我们设置名字为 “cn.iocoder.springboot.lab37.loggingdemo” 的 Logger 的日志级别为 DEBUG。
  • < 3.3> 处,设置 Root 的 Appender 为控制台和日志文件,日志级别为 INFO。

测试方式与前面的例子一样,这里不多赘述。

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

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

相关文章

Tomcat、Maven以及Servlet的基本使用

Tomcat什么是TomcatTomcat的目录结构启动Tomcat MavenMaven依赖管理流程配置镜像源 Servlet主要工作实现Servlet添加依赖实现打包分析 配置插件 Tomcat 什么是Tomcat Tomcat 是一个 HTTP 服务器。前面我们已经学习了 HTTP 协议, 知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务…

LinearAlgebraMIT_4_矩阵的LU分解

矩阵做逆变换需要要反过来&#xff0c;如下&#xff0c; 转置的逆等于逆的转置。 在知道了上面的基础知识后&#xff0c;我们进行矩阵的分解&#xff0c;常见如LU分解和LDU分解&#xff0c;如下&#xff0c; 在这里&#xff0c;我们首先具有一个矩阵A&#xff0c;我们对矩阵A进…

用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版

我们用自定义函数setDocFmt()来实现对公文的排版。 一、获取公文参数值 要对公文进行排版&#xff0c;首先要读取公文“参数设置”区中的参数值。比如公文要求对公文标题的一般规定是&#xff1a;一般用2号小标宋体字&#xff0c;居中显示。标题与正文中间空一行。 这些是“参…

Git---企业级开发模型

文章目录 前言拓展 一、系统开发环境二、Git分支设计规范master分支release分支develop分支feature分支hotfix分支 三、企业级项目管理实战准备工作创建项目创建仓库添加成员1. 添加企业成员2.添加项目成员3. 添加仓库开发⼈员 开发场景-基于git flow模型的实践新需求加入修复测…

Python之字典(dict)基础知识点

文章目录 一、创建字典1.1 基于dict函数创建1.2 基于{}创建1.3 基于空字典添加元素创建 二、访问字典三、修改字典四、删除字典五、字典的常用方法5.1 dict.items()方法5.2 dict.get()方法5.3 dict.setdefault()方法 参考资料 字典是python当中的一种数据类型&#xff0c;其结果…

Kafka入门,手动提交offset,同步提交,异步提交,指定 Offset 消费(二十三)

手动提交offset 虽然offset十分遍历&#xff0c;但是由于其是基于时间提交的&#xff0c;开发人员难以把握offset提交的实际。因此Kafka还提供了手动提交offset的API 手动提交offset的方法有两种&#xff1a;分别commitSync(同步提交)和commitAsync(异步提交)。两者的相同点是&…

conda创建环境等相关知识

1、首先下载Anaconda&#xff0c;官网下载即可&#xff0c;打开如下选项&#xff0c; 2、创建一个环境&#xff1a;命令如下 conda create -n 虚拟环境名称 python?实例&#xff1a;创建一个pytorch环境&#xff0c;指定python版本为3.9版本 conda create -n pytorch pytho…

【七天入门数据库】第一天 MySQL的安装部署

系列文章传送门&#xff1a; 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 MySQL数据库存在多种版本&#xff0c;不同的版本在不同的平台上&#xff08;OS&#xff0c;也就是操作系统上&a…

文件资源管理器卡住,使用任务管理器结束任务后桌面图标和任务栏消失的解决方案

事情的起因是这样的&#xff0c;我想删除压缩包里的一张照片&#xff0c;结果文件资源管理器就卡住了&#xff0c;删除进度一直是0%&#xff0c;等了好久也没反应。没办法&#xff0c;只能掏出秘密武器任务管理器了&#xff0c;找到文件资源管理器&#xff0c;右键选择结束任务…

游戏渲染技术:前向渲染 vs 延迟渲染 vs Forward+渲染 (一)

在这篇文章中&#xff0c;会分析和对比三种渲染算法&#xff1a; 前向渲染(Forward Rendering)延迟着色(Deferred Shading)Forward(基于Tile的前后渲染) 介绍 前向渲染 前向渲染是通过在场景中光栅化每个几何对象来工作的&#xff0c;在着色过程中&#xff0c;通过迭代每个灯…

ModaHub魔搭社区:向量数据库Zilliz Cloud删除 Entity和删除 Collection教程

目录 删除单个 Entity 批量删除 Entity 开始前 操作步骤 使用限制 Entity 是指存储在 Zilliz Cloud 集群中的数据实体,包含用于处理、搜索和查询的数据。如果您不再需要某个 Entity,可以执行相关操作将其删除。 本文介绍如何从 Collection 中删除单个或多个 Entity。 …

RocketMQ5.0消息消费<三> _ 消息消费

RocketMQ5.0.0消息消费&#xff1c;三&#xff1e; _ 消息消费 一、消息消费 1. 消费UML图 PUSH模式消息拉取机制参考《RocketMQ5.0.0消息消费&#xff1c;一&#xff1e; _ PUSH模式的消息拉取​》&#xff0c;PullMessageService负责对消息队列进行消息拉取&#xff0c;从B…

Cocktail mac版-Cocktail 苹果版(清理维护优化工具)安装教程

Cocktail for Mac是一款Mac OS X系统清理、修复和优化的常规实用工具。它不仅可以一键清理系统中的残余垃圾。还可以帮助用户修改系统的隐藏属性、隐藏文件&#xff0c;对优化mac系统有很大的帮助。CocktailV11.4破解版增加了清除macOS内容缓存的功能。 内容缓存保留了各种Appl…

如何查看自己windows电脑的ip地址

可能有些小伙伴对查看自己电脑的ip地址不太熟悉&#xff0c;今天这里介绍几种方式&#xff1a; 我自己的电脑是Win11&#xff0c;就直接展示截图了。 一、命令行方式&#xff1a; windowsR打开 CMD(命令行窗口)或者windows PowerShell窗口&#xff0c;输入以下命令&#xff1…

企业信息化可以为企业带来什么效益?

一、什么是信息化 在具体谈信息化前我们先来谈一谈信息化和数字化 信息化&#xff1a;信息化是指培养、发展以计算机为主的智能化工具为代表的新生产力&#xff0c;并使之造福于社会的历史过程。与智能化工具相适应的生产力&#xff0c;称为信息化生产力。 数字化&#xff1a;…

MySQL基础篇第6章(多表查询)

文章目录 1、一个案例引发的多表连接1.1 案例说明1.2 笛卡儿积 2、多表查询分类讲解2.1 等值连接2.2 非等值连接2.3 自连接2.4 内连接2.5 外连接(OUTER JOIN)2.5.1 左外连接(LEFT OUTER JOIN)2.5.2 右外连接2.5.3 满外连接(FULL OUTER JOIN) 3、UNION的使用3.1 UNION操作符3.2 …

Linux 命令大全(下)

Linux 命令大全&#xff08;上&#xff09; 本文目录 6. 网络通讯 常用命令6.1 ssh 命令 – 安全的远程连接服务器6.1.1 含义6.1.2 语法格式6.1.3 常用参数6.1.4 参考示例 6.2 netstat 命令 – 显示网络状态6.2.1 含义6.2.2 语法格式6.2.3 常用参数6.2.4 参考示例 6.3 dhclient…

IP协议【图解TCP/IP(笔记九)】

文章目录 IP即网际协议IP相当于OSI参考模型的第3层网络层与数据链路层的关系 IP基础知识IP地址属于网络层地址路由控制■ 发送数据至最终目标地址■ 路由控制表 数据链路的抽象化IP属于面向无连接型 IP即网际协议 TCP/IP的心脏是互联网层。这一层主要由IP&#xff08;Internet…

【netty】TCP 粘包和拆包及解决方案

TCP 粘包和拆包基本介绍 TCP是面向连接的&#xff0c;面向流的&#xff0c;提供高可靠性服务。收发两端&#xff08;客户端和服务器端&#xff09;都要有一一成对的socket&#xff0c;因此&#xff0c;发送端为了将多个发给接收端的包&#xff0c;更有效的发给对方&#xff0c…

电商API接口商品页面数据(详情数据,销量数据,sku数据,视频数据,优惠券数据)接口代码示例

有探讨稳定采集电商等多平台整站实时商品详情历史价格数据接口&#xff0c;通过该接口开发者可以更好地了解商品的情况&#xff0c;商品详情数据详细信息查询&#xff0c;数据参数包括&#xff1a;商品链接&#xff0c;商品列表主图、价格、标题&#xff0c;sku&#xff0c;库存…