SpringBoot 日志
目录
一. 日志概述
二. 日志的使用
1. 打印日志
(1) 获取日志对象
(2) 输出要打印的内容
2. 日志框架简介
(1) 门面模式简介
(2) SLF4J 框架简介
3. 日志的格式
4. 日志的级别
5. 日志配置
(1) 配置日志级别
(2) 日志持久化存储
① 配置日志文件名
② 配置日志的存储目录
(3) 日志文件分割
(4) 更简单的日志输出
一. 日志概述
日志对我们来说并不陌生, 从JavaSE部分开始, 我们就在使用 System.out.print 来打印日志了. 通过打印日志来发现和定位问题, 或者根据日志来分析程序的运行过程. 在Spring的学习中, 我们也经常根据控制台的日志来分析和定位问题.
随着项目的复杂度提升, 我们对日志的打印也有了更高的需求, 不仅仅是定位排查问题.
比如 记录一些用户的操作记录; 使用日志来记录用户的一些喜好; 把日志持久化, 后续进行数据分析等. 但是 System.out.print 不能很好的满足我们的需求, 此时我们就需要引入一些专门的日志框架来完成这样的任务.
二. 日志的使用
1. 打印日志
打印日志的步骤:
step1: 从程序中获取日志对象.
step2: 使用日志对象输出要打印的内容.
(1) 获取日志对象
在程序中获取日志对象需要使用日志工厂 LoggerFactory, 如下代码所示:
package com.jrj.logger;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class LoggerController {public static Logger logger = LoggerFactory.getLogger(LoggerController.class);
}
[注意]:
① Logger 对象是属于 org.slf4j 包下的, 不要导错包.
② LoggerFactory.getLogger 需要传递一个参数. 参数类型是一个类对象, 传入的是哪个类的类对象, 就表示哪个类在打印日志.
(2) 输出要打印的内容
日志对象的打印方法有很多种, 我们这里先使用 logger.info() 方法打印.
@RestController
public class LoggerController {public static Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/printLogger")public static String printLogger(){logger.info("打印日志");return "打印日志";}
}
打印结果如下:
2. 日志框架简介
SLF4J不同于其他日志框架. 它并不是一个真正的日志实现, 而是一个抽象层, 一种接口. 所有SLF4J并不能独立使用, 需要和具体的更底层的日志框架配合使用.
(1) 门面模式简介
门面模式又称为外观模式. 提供了一个统一的接口, 用来访问子系统中的一群接口. 其主要特征是 定义了一个高层接口, 让子系统更容易使用.
(2) SLF4J 框架简介
SLF4J 就是其他日志框架的门面. SLF4J可以理解为是提供日志服务的统一API接口, 并不涉及到具体的日志逻辑实现.
存在的问题:
- 不同日志框架的API接口和配置文件不同. 如果多个日志框架共存, 那么不得不维护多套配置文件(这个配置文件是指用户自定义的配置文件).
- 如果要更换日志框架, 应用程序将不得不修改代码, 并且修改过程中可能会存在⼀些代码冲突.
- 如果引入的第三方框架, 使用了多套, 那就不得不维护多套配置.
3. 日志的格式
通过打印出的日志我们可以看到, 日志内容从左到右依次为:
① 日期, 时间 (精确到毫秒)
② 日志级别
③ 进程ID
④ 打印日志的项目名
⑤ 线程名
⑥ Logger 名
⑦ 日志内容
4. 日志的级别
日志级别代表着日志信息对应问题的严重性, 方便更快地筛选符合目标的日志信息.
日志的级别从高到低依次为: FATAL, ERROR, WARN, INFO, DEBUG, TRACE
- FATAL: 致命信息, 表示需要立即被处理的系统级错误.
- ERROR: 错误信息, 级别较高的错误日志信息,但仍然不影响系统的继续运行.
- WARN: 警告信息, 不影响使用,但需要注意的问题
- INFO: 普通信息, 用于记录应用程序正常运行时的⼀些信息,例如系统启动完成、请求处理完成等.
- DEBUG: 调试信息, 需要调试时候的关键信息打印.
- TRACE: 追踪信息, 比DEBUG更细粒度的信息事件 (除非有特殊用意,否则一般使用DEBUG级别替代)
[注]: 一般情况下, 日志级别越高, 收到的消息越少.
例如: 出现fatal级别的日志, 表示服务器出现了某种程度上的不可用, 需要程序员紧急介入处理, 一般在一个程序的生命周期中fatal级别的日志只会出现一次.
我们下来打印一下不同级别的日志观察一下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/logger")
public class LoggerController {public static Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/printLogger")public static String printLogger(){logger.info("打印info日志");logger.error("打印error日志");logger.warn("打印warn日志");logger.debug("打印debug日志");logger.trace("打印trace日志");return "打印日志";}
}
从打印结果我们可以看到: 只打印出了 INFO, WARN, ERROR 级别的日志. 却没有打印出 DEBUG 和 TRACE 级别的日志. 这是因为日志的输出默认最低级别是 INFO 级别, 也就是说, 级别低于INFO的都不会打印出来.
5. 日志配置
(1) 配置日志级别
日志的级别配置只需要在配置文件中设置 "logging.level" 配置项即可.
properties:
logging.level.root=debug
yml:
logging:level:root: debug
运行后效果:
后续我们在项目中配置日志级别时, properties 和 yml 只需要配置其中的一个即可.
root 表示的是该项目下的所有文件的日志. 我们也可以通过 在level下面加上软件包的树形结构 来限定 只有指定包下文件的日志从指定级别开始打印.
logging.level.org.example.practice.LoggerController=trace
(2) 日志持久化存储
以上的日志都是输出在控制台的 (日志存在内存中), 但是我们有时需要持久存储日志 (将日志存到硬盘中) 以便出现问题之后追溯问题. 那如何持久化存储日志呢? --> 日志的持久化存储有两种方式
① 配置日志文件名
# 设置⽇志⽂件的⽂件名
logging:file:name: logger/springboot.log
② 配置日志的存储目录
# 设置⽇志⽂件的⽬录
logging:file:path: F:/temp
配置好后, 运行程序, 会发现指定路径下多出一个文件.
- 配置日志文件的存储路径, 可以是相对路径, 可以是绝对路径. 路径中只可以设置路径(不能设置文件名称).
- logging.file.name 和 logging.file.path 两者都配置的情况下, 只生效一个 (以 logging.file.name 为准)
(3) 日志文件分割
如果我们的日志都放在一个文件中, 随着项目的运行, 日志文件就会越来越大. 此时我们就需要对日志文件进行分割.
当然日志框架也考虑到了这一点. 所以我们如果不手动分割的话, 就会自动进行分割 (默认日志文件大小超过10M就进行分割).
logging:logback:rollingpolicy:max-file-size: 2KBfile-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
上述代码中的配置表示: ① 最大日志文件大小为2KB (大小超过2KB就分割) ; ② 分割后的日志文件名为: 日志名. 日期. 索引
将上述代码运行, 并且多打印几次日志, 我们得到:
(4) 更简单的日志输出
每次都使用LoggerFactory很繁琐,每个类都要添加一遍Logger对象,于是lombok就为我们提供了一种特别方便的方式.
- 添加lombok依赖.
- 使用 @Slf4j注解.
@Slf4j 注解产生Logger对象(对象名默认为log). 使用log对象进行日志输出.
@RestController
@Slf4j
public class LoggerController {public static String printLogger(){log.info("打印info日志");log.error("打印error日志");log.warn("打印warn日志");log.debug("打印debug日志");log.trace("打印trace日志");return "打印日志";}
}
通过结果我们可以看到, 同样可以正常打印日志.
相关文章:
SpringBoot 日志
目录 一. 日志概述 二. 日志的使用 1. 打印日志 (1) 获取日志对象 (2) 输出要打印的内容 2. 日志框架简介 (1) 门面模式简介 (2) SLF4J 框架简介 3. 日志的格式 4. 日志的级别 5. 日志配置 (1) 配置日志级别 (2) 日志持久化存储 ① 配置日志文件名 ② 配置日志的…...
每日 Java 面试题分享【第 16 天】
欢迎来到每日 Java 面试题分享栏目! 订阅专栏,不错过每一天的练习 今日分享 3 道面试题目! 评论区复述一遍印象更深刻噢~ 目录 问题一:Java 运行时异常和编译时异常之间的区别是什么?问题二:什么是 Jav…...
《多线程基础之互斥锁》
【互斥锁导读】互斥锁是大家使用最多的线程同步手段,但仅仅知道怎么用还是不够的?比如:面试官问你"互斥锁是属于内核层还是应用层的同步保护机制?性能怎样?","频繁加解锁,会有什…...
渲染流程概述
渲染流程包括 CPU应用程序端渲染逻辑 和 GPU渲染管线 一、CPU应用程序端渲染逻辑 剔除操作对物体进行渲染排序打包数据调用Shader SetPassCall 和 Drawcall 1.剔除操作 视椎体剔除 (给物体一个包围盒,利用包围盒和摄像机的视椎体进行碰撞检测…...
Android车机DIY开发之学习篇(七)NDK交叉工具构建
Android车机DIY开发之学习篇(七)NDK交叉工具构建 1.ubuntu安装GCC sudo apt-get update sudo apt-get install gcc g sudo gcc --version sudo g --version 2.测试GCC VSCODE中新建Hello.c编译 #include <stdio.h> int main(void) { printf(“Hello, this is a progr…...
c++ map/multimap容器 学习笔记
1 map的基本概念 简介: map中所有的元素都是pair pair中第一个元素是key(键),第二个元素是value(值) 所有元素都会根据元素的键值自动排序。本质: map/multimap 属于关联式容器,底…...
计算机网络之计算机网络体系结构
一、定义与概述 计算机网络体系结构是计算机网络及其部件所应该完成功能的精确定义,这些功能由何种硬件或软件完成是遵循这种体系结构的。体系结构是抽象的,实现是具体的,是运行在计算机软件和硬件之上的。 二、主流模型 目前,…...
研发的立足之本到底是啥?
0 你的问题,我知道! 本文深入T型图“竖线”的立足之本:专业技术 技术赋能业务能力。研发在学习投入精力最多,也误区最多。 某粉丝感发展遇到瓶颈,项目都会做,但觉无提升,想跳槽。于是&#x…...
最优化问题 - 内点法
以下是一种循序推理的方式,来帮助你从基础概念出发,理解 内点法(Interior-Point Method, IPM) 是什么、为什么要用它,以及它是如何工作的。 1. 问题起点:带不等式约束的优化 假设你有一个带不等式约束的优…...
Vue5---
目录 一、学习目标 1.自定义指令 2.插槽 3.综合案例:商品列表 4.路由入门 二、自定义指令 1.指令介绍 2.自定义指令 3.自定义指令的语法 三、自定义指令-指令的值 1.需求 2.语法 3.代码示例 五、插槽-默认插槽 1.作用 2.需求 4.使用插槽的基本语法…...
Helm Chart 实战指南
Helm 是 Kubernetes 的包管理工具,而 Helm Chart 是 Helm 的核心概念,用于定义、安装和升级 Kubernetes 应用。本文将带你从零开始,通过实战演练,掌握 Helm Chart 的创建、配置和部署,帮助你高效管理 Kubernetes 应用。 1. 环境准备 在开始之前,确保你已经具备以下环境:…...
如何写一篇高质量的提示词?
不管是产品经理还是使用AI工具的用户,很多时候的烦恼是如何写提示词,我觉得写提示词就是在梳理思路,下边是一个提示词的结果,OpenAI 的总裁 Greg Brockman 曾转发过这个结构。 这种结构可以创建一个清晰、简洁、可执行的提示&…...
系统架构设计师教材:信息系统及信息安全
信息系统 信息系统的5个基本功能:输入、存储、处理、输出和控制。信息系统的生命周期分为4个阶段,即产生阶段、开发阶段、运行阶段和消亡阶段。 信息系统建设原则 1. 高层管理人员介入原则:只有高层管理人员才能知道企业究竟需要什么样的信…...
在Windows系统中本地部署属于自己的大语言模型(Ollama + open-webui + deepseek-r1)
文章目录 1 在Windows系统中安装Ollama,并成功启动;2 非docker方式安装open-webui3下载并部署模型deepseek-r1 Ollama Ollama 是一个命令行工具,用于管理和运行机器学习模型。它简化了模型的下载与部署,支持跨平台使用,…...
使用Redis生成全局唯一ID示例
全局ID生成器,一种在分布式系统下用来生成全局唯一ID的工具,一般满足一下要求特性 1.唯一性 2.高性能 3.安全性 4.递增性 5.高可用 Component public class RedisIdWorker {/*** 定义一个开始的时间戳(秒级)* param args*/private static final long BEGIN_TIMESTAMP 16…...
【llm对话系统】 LLM 大模型推理python实现:vLLM 框架
在 LLM 的应用中,推理 (Inference) 阶段至关重要。它指的是利用训练好的 LLM 模型,根据输入 (Prompt) 生成文本的过程。然而,LLM 的推理速度往往较慢,尤其是在处理长序列或高并发请求时,效率瓶颈尤为突出。 为了解决这…...
16.Word:石油化工设备技术❗【28】
目录 题目 NO1.2 NO3 NO4 题目 NO1.2 F12:另存为将“Word素材.docx”文件另存为“Word. docx”(“docx”为文件扩展名) 光标来到表格上方→插入→形状→新建画布→单击选中→格式→高度/宽度(格式→大小对话框→取消勾选✔锁定…...
《多阶段渐进式图像修复》学习笔记
paper:2102.02808 GitHub:swz30/MPRNet: [CVPR 2021] Multi-Stage Progressive Image Restoration. SOTA results for Image deblurring, deraining, and denoising. 目录 摘要 1、介绍 2、相关工作 2.1 单阶段方法 2.2 多阶段方法 2.3 注意力机…...
Oracle、PostgreSQL该学哪一个?
从事数据库运维一线工作的老鸟,经常会有人来问我:“Oracle 和 PostgreSQL,我该学哪个?哪个更有职业发展前景?” 今天就来和大家好好唠唠。 先说说 Oracle。它堪称数据库领域的 “老牌贵族”,功能极其强大。…...
SpringCloud系列教程:微服务的未来(十七)监听Nacos配置变更、更新路由、实现动态路由
前言 在微服务架构中,API 网关是各个服务之间的入口点,承担着路由、负载均衡、安全认证等重要功能。为了实现动态的路由配置管理,通常需要通过中心化的配置管理系统来实现灵活的路由更新,而无需重启网关服务。Nacos 作为一个开源…...
第十六届蓝桥杯大赛软件赛(编程类)知识点大纲
目录 大学 C 组 大学 B 组 研究生及大学 A 组 说明: 大学 C 组 1. 枚举:难度:[1-3] 2. 排序 冒泡排序:难度 2选择排序:难度 3插入排序:难度 3 3. 搜索 广度优先搜索(BFS)&a…...
商品信息管理自动化测试
目录 前言 一、思维导图 二、代码编写 1.在pom.xml文件中添加相关依赖 2.自动化代码编写 三、代码测试 小结 前言 1. 针对商品信息管理项目进行测试,商品信息管理项目主要有商品列表页、部门列表页、员工列表页,主要功能:对商品信息的…...
批量卸载fnm中已经安装的所有版本
直接上代码 fnm list | awk -F NR>1 {print line} {line$2} | xargs -n 1 -I {} fnm uninstall {}原理 fnm list 列出 fnm 中所有已经安装的 node 版本 awk -F NR>1 {print line} {line$2} 以空格分隔-F {line$2},取从左到右第 2 段(v22.11…...
有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
# 分析:兔子从第三个月起增加一对,前两个月1对,三月份2对,4月份3对,5月份5对,6月份8对,7月份13个,以此类推每个月的兔子总数是前两月的兔子数的和。 def fibonacci(n): # 定义了斐波…...
ReactNative react-devtools 夜神模拟器连调
目录 一、安装react-devtools 二、在package.json中配置启动项 三、联动 一、安装react-devtools yarn add react-devtools5.3.1 -D 这里选择5.3.1版本,因为高版本可能与夜神模拟器无法联动,导致部分功能无法正常使用。 二、在package.json中配置启…...
【Unity教程】零基础带你从小白到超神part3
粒子系统 在创建粒子系统之前,需要先添加一些粒子样式,这可以在资源商店中通过导入官方提供的StandardAssets资源包得到。完成资源的导入后,该资源包中的StandardAssets>ParticleSystems>Prefabs文件夹下包含多种成品粒子效果…...
[Java]快速入门
java是什么 Java是美国的sun 公司(Stanford University Network)在1995年推出的一门计算机高级编程语言 sun公司于2009年被Oracle(甲骨文)公司收购。 普遍认同lava的联合创始人之一: 詹姆斯高斯林(James Gosling)为Java之父。 Java是世界上最流行的编程语言之一,…...
慕课:若鱼1919的视频课程:Java秒杀系统方案优化 高性能高并发实战,启动文档
代码: Javahhhh/miaosha191: 运行成功了慕课若鱼1919的视频课程:Java秒杀系统方案优化 高性能高并发实战https://github.com/Javahhhh/miaosha191 https://github.com/Javahhhh/miaosha191 miaosha项目启动文档 需安装的配置环境: VMwar…...
stack 和 queue容器的介绍和使用
1.stack的介绍 1.1stack容器的介绍 stack容器的基本特征和功能我们在数据结构篇就已经详细介绍了,还不了解的uu, 可以移步去看这篇博客哟: 数据结构-栈数据结构-队列 简单回顾一下,重要的概念其实就是后进先出,栈在…...
Kafka的内部通信协议
引言 kafka内部用到的常见协议和优缺点可以看看原文 Kafka用到的协议 本文奖详细探究kafka核心通信协议和高性能的关键 网络层通信的实现 基于 Java NIO:Kafka 的网络通信层主要基于 Java NIO 来实现,这使得它能够高效地处理大量的连接和数据传输。…...
【论文投稿-第八届智能制造与自动化学术会议(IMA 2025)】HTML, CSS, JavaScript:三者的联系与区别
大会官网:www.icamima.org 目录 前言 一、HTML(超文本标记语言):网页的骨架 HTML 的作用: 例子: 总结: 二、CSS(层叠样式表):网页的外观设计 CSS 的…...
解锁豆瓣高清海报:深度爬虫与requests进阶之路
前瞻 PosterBandit 这个脚本能够根据用户指定的日期,爬取你看过的影视最高清的海报,并自动拼接成指定大小的长图。 你是否发现直接从豆瓣爬取下来的海报清晰度很低? 使用 .pic .nbg img CSS 选择器,在 我看过的影视 界面找到图片…...
大数据治理实战:架构、方法与最佳实践
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 大数据治理是确保数据质量、合规性和安全性的重要手段,尤其在数据驱动决策和人工智能应用日益普及的背景下&…...
03链表+栈+队列(D1_链表(D1_基础学习))
目录 一、什么是链表 二、基本操作 三、为什么要使用链表 四、为什么能够在常数时间访问数组元素 数组优点 数组缺点 五、动态数组诞生 链表优点 链表缺点 六、链表、数组和动态数组的对比 七、 链表种类 1. 单向链表 2. 双向链表 3. 循环链表 八、链表衍生 ...…...
芯片AI深度实战:进阶篇之vim内verilog实时自定义检视
本文基于Editor Integration | ast-grep,以及coc.nvim,并基于以下verilog parser(my-language.so,文末下载链接), 可以在vim中实时显示自定义的verilog 匹配。效果图如下: 需要的配置如下: 系列文章: 芯片…...
【计算机网络】host文件
host文件的主要功能: 域名解析 本地映射:host文件的主要功能是将**域名映射到相应的 IP 地址**。当计算机需要访问一个网站或服务时,它会首先在 host文件中查找该域名对应的 IP 地址。如果在 host文件中找到了匹配的域名和 IP 地址映射&…...
算法随笔_31:移动零
上一篇:算法随笔_30: 去除重复字母-CSDN博客 题目描述如下: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,…...
知识图谱的动态演化与进化策略
目录 前言1. 数据补充与更新策略1.1 数据源扩展1.2 实体与关系更新1.3 流数据处理 2. 数据质量保障与清洗2.1 数据清洗2.2 数据融合2.3 质量评估 3. 规则与模型优化3.1 规则学习与优化3.2 模型更新3.3 推理能力增强 4. 知识验证与反馈机制4.1 用户反馈机制4.2 知识验证机制 5. …...
C ++ 1
静态变量和全局变量、局部变量的区别、在内存上是怎么分布的 静态局部变量 ● 特点: ○ 作用域:仅限于声明它们的函数或代码块内部。 ○ 生命周期:静态局部变量在程序的整个运行期间都存在,只初始化一次(在第一次使用…...
mybatis(134/134)完结
一级缓存(默认情况下开启)同一个sqlsession中执行相同的查询语句走一级缓存 二级缓存 :同一个sqlsessionfactory,sqlsession关闭了才会将一级缓存提交到二级缓存中 外部编写的缓存 PageHelper插件:方便进行分页&#x…...
SQL注入漏洞之错误类型注入 爆破表 字段 列名称 以及mysql版本 以及Limit使用方式解释 以及靶场相关联系
目录 Msql函数常用函数 基本变量函数 报错注入 报错注入什么时候用? 报错注入函数 报错注入语句-这是重点 报错性注入实战 案例1 爆数据库中的表 案例2 表名称 案例3 表字段 Limit用法解释: Msql函数常用函数 基于msql的基本变量可以学习常用函数是为了…...
k均值聚类将数据分成多个簇
K-Means 聚类并将数据分成多个簇,可以使用以下方法: 实现思路 随机初始化 K 个聚类中心计算每个点到聚类中心的距离将点分配到最近的簇更新聚类中心重复上述过程直到收敛 完整代码: import torch import matplotlib.pyplot as pltdef kme…...
智能工厂能耗管理:Python助力节能增效
智能工厂能耗管理:Python助力节能增效 在工业4.0时代,工厂能耗管理已成为制造企业降本增效的重要一环。传统的能耗管理方式往往依赖人工统计和经验决策,导致能源浪费严重。而借助人工智能与Python的强大能力,我们可以实现智能化、数据驱动的能耗优化方案。今天,我们就来聊…...
【汽车电子架构】AutoSAR从放弃到入门专栏导读
本文是汽车电子架构:AutoSAR从放弃到入门专栏的导读篇。文章延续专栏文章的一贯作风,从概念与定义入手,希望读者能对AutoSAR架构有一个整体的认识,然后对专栏涉及的文章进行分类与链接。本文首先从AutoSAR汽车软件架构的概念&…...
【go语言】指针
一、指针的定义和使用 在 Go 语言中,指针是一种变量,用来存储另一个变量的内存地址。通过指针,我们可以间接地操作其他变量的值。Go 语言中的指针与其他语言(如 C 或 C)的指针有所不同,它不支持指针算术&am…...
宝塔面板SSL加密访问设置教程
参考:https://www.bt.cn/bbs/thread-117246-1-1.html 如何快速使用证书加密访问面板 因早期默认未开启https访问所以没有相关的风险提醒,现面板默认已开启https加密访问、提升安全性 由于采用的是服务器内部本身签发证书,不被公网浏览器信任请参考以下步…...
spring中解决循环依赖的方法
为了避免这种循环依赖问题,Spring 引入了三级缓存的机制,分为: 一级缓存(singletonObjects):这是存放已经完全创建好的单例 Bean 的缓存。当 Bean 完全初始化并且可以被使用时,会存放在这里。 …...
新时代架构SpringBoot+Vue的理解(含axios/ajax)
文章目录 引言SpringBootThymeleafVueSpringBootSpringBootVue(前端)axios/ajaxVue作用响应式动态绑定单页面应用SPA前端路由 前端路由URL和后端API URL的区别前端路由的数据从哪里来的 Vue和只用三件套axios区别 引言 我是一个喜欢知其然又知其所以然的…...
Docker/K8S
文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 2.3 pod的生命周期2.4 pod中的容器1. 容器的生命周期2. 生命周期的回调3. 容器重启策略4. 自定义容器启…...
新年快乐!给大家带来了一份 python 烟花代码!
大家好,我是菲英。 今天带来一份 python 代码,是简易的烟花小程序。 安装包 pip install pygame进入正题 - 我们的烟花代码: import pygame import random import math# 初始化pygame pygame.init()# 设置屏幕大小和标题 screen pygame.…...