当前位置: 首页 > news >正文

log4j学习

依赖

<!--log4j依赖-->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency><!--测试-->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency>

入门案例以及日志级别说明

@Test
public void test01() {/*Log4入门案例注意在家初始化信息:BasicConfigurator.configure();日志级别说明:Log4j提供了8个级别的日志输出,分别为ALL 最低等级 用于打开所有几倍的日志记录TRACE 程序推进下的追踪信息,这个追踪信息的日志级别非常低,一般情况下不使用DEBUG 指出细粒度信息时间对调试应用程序是非常有帮助的,主要是配合开发,在开发过程中打印一些重要的运行信息INFO 消息的粗粒度级别运行信息WARN 表示警告,程序在运行过程中会出现的有可能会发生的隐形的错误信息注意:,有些信息不是错误,但是这个级别的输出目的就是为了给程序员以提示ERROR 系统的错误信息,发生的错误不影响系统的运行一般情况下,如果不想输出太多的日志,则使用该级别即可FATAL 表示严重错误,它是哪一种一旦发生系统就不可能继续运行的严重错误如果这种级别的错误出现了,表示程序就可以停止运行了OFF 最高等级的级别,用户关闭所有的日志记录其中 DEBUG 是默认的日志输出级别*/// 加載初始化配置BasicConfigurator.configure();Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");
}

配置文件说明

log4j.rootLogger = trace,console# 配置appender 输出方式 日志输出到哪里,现在是控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender# 表示输出的格式
log4j.appender.console.layout = org.apache.log4j.PatternLayoutlog4j.appender.console.layout.conversionPattern = %r [%t] %p %c %x - %m%n
@Test
public void test02() {/*配置文件的说明1、观察原源码  BasicConfigurator.configure();可以得到两条信息(1)创建根节点对象 Logger root = Logger.getRootLogger();(2)根节点添加了ConsoleAppender对象(表示默认打印到控制台,自定义的格式化输出)2、不使用 BasicConfigurator.configure();加载使用自定义的配置文件来实现功能通过对上边第一点的输出配置文件需要提供Logger、Appender、Layout 3个组件信息(通过配置文件来代替代码)分析Logger logger = Logger.getLogger(Log4jTest.class);进入到getLogger方法,会看到代码LogManager.getLogger(clazz.getName());LogManager:是一个日志管理器LogManager,里边有很多常量,它们代表的就是不同形式(后缀名不同)的配置文件最常使用的就是log4j.properties 这个属性文件(语法简单,使用方便)问题:log4j.properties的加载时机找到LogManager的static代码块在static下遭到下列代码Loader.getResource("log4j.properties");系统会去当前类路径下找到log4j.properties这个文件进行加载对于maven工程resource目录就是当前类路径下的加载完毕后,配置文件是如何读取呢?OptionConverter.selectAndConfigure(url, configuratorClassName,LogManager.getLoggerRepository());进去方法:作为属性文件进行加载: configurator = new PropertyConfigurator();进入到这个PropertyConfigurator这个属性类,看到很多常量,这些常量就是我们在属性配置文件中的配置项如下两项是我们必须配置的static final String ROOT_LOGGER_PREFIX   = "log4j.rootLogger";static final String      APPENDER_PREFIX = "log4j.appender.";通过这行代码:String prefix = APPENDER_PREFIX + appenderName;我们需要自定义一个appendername 假设蛇我们去的名字是console 就是控制台输出(起名字需要见名之意,console那么我们在配置应该配置控制台输出)log4j.appender.console取值就是log4j中为我们提供的appender类例如log4j.appender.console = org.apache.log4j.ConsoleAppender还可以指定输出格式通过代码:String layoutPrefix = prefix + ".layout";配置:log4j.appender.console.layout = org.apache.log4j.SimpleLayout通过log4j.properties继续在类中搜索找到方法void configureRootCategory在这个方法中找到执行了parseCategory 方法观察这个方法:执行了代码:StringTokenizer st = new StringTokenizer(value, ",");表示要以逗号的方式分割字符串,证明了log4j.rootLogger的取值,其中可以有多个值,但是要以逗号进行分割通过代码:String levelStr = st.nextToken();表示切割后的第一个值是日志的级别通过代码:while(st.hasMoreTokens())表示接下2~n个都是可以通过循环来取得的,具体的内容是:appenderName(日志输出到哪里)证明我们配置方式是:log4j.rootLogger = 日志级别,appenderName1,appenderName2,...,appenderName n表示我们可以同时在根节点上配置多个日志输出的途径通过我们自己的配置文件就可以加载和这个代码了*/// BasicConfigurator.configure();Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");
}

打开日志输出的详细信息

@Test
public void test03(){/*通过Logger中的开关打开日志输出的详细信息查看LogManager类中的方法:getLoggerRepository()找到代码LogLog.debug(msg, ex);Loglog会使用debug级别的输出为我们展现日志输出的详细信息Logger是记录系统的日志,那么Loglog的使用来记录Logger的日志进入到Loglog.debug(msg, ex)方法中通过代码:if(debugEnabled && !quietMode) {观察到if判断中的这两个开关都是必须开启才行!quietMode 是已经启动的状态,不需要我们去管debugEnabled默认是关闭的所以我们只需要设置debugEnabled为true就可以了*/LogLog.setInternalDebugging(true);Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");
}

关于log4j.properties 的 layout 的说明

log4j.appender.console.layout.conversionPattern = %r [%t] %p %c %x - %m%n

-X号: X信息输出时左对齐;
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.Java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java servlets这样的多客户多线程的应用中。
%%: 输出一个"%“字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为”/r/n",Unix平台为"/n"输出日志信息换行
**可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。**如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

@Test
public void test04() {/*关于log4j.properties 的 layout 的说明其中PatternLayout 是日常使用最多的方式查看源码setConversionPattern这个方式就是PatterLayout的核心方法conversionPattern在log4j.properties 这个文件中将layout设置为PatterLayout主要配置的属性是conversionPatter[%p]%r %c %t %d{yyyy:MM:dd HH:mm:ss} %m %n可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式[%p]%r %c %t %d{yyyy:MM:dd HH:mm:ss} %m %n[%-5p] 左对齐5个字符,不足5个空格补齐[%5p] 右对齐5个字符,不足5个空格补齐*/Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");}

将日志输出到文件中

# 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示)
log4j.rootLogger = trace,file
# 配置appender 输出方式 日志输出到哪里,输出到文件
log4j.appender.file = org.apache.log4j.FileAppender
# 表示输出的格式
log4j.appender.file.layout = org.apache.log4j.PatternLayout
# 自定义layout输出的内容
log4j.appender.file.layout.conversionPattern =  [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n
# 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性
log4j.appender.file.file = E://test//log4j.log
# 配置输出的字符编码
log4j.appender.file.encoding = utf-8
@Test
public void test05() {/*将日志输出到文件中console是输出控制台的,将日志输出到文件中,也可以做多方向的输出查看FileAppender的源码查看属性信息protected boolean fileAppend = true; 表示是否追加日志信息,true表示追加protected int bufferSize = 8*1024; 缓冲区的大小 kb继续观察找到 setFile 方法 设置文件的位置通过ognl可以推断出setFile这个方法操作的就是File如果有输出中文的需求怎么办观察FileAppender的父类 WriterAppenderprotected String encoding; 有一个这个属性,就是来设置日志输出的字符编码*/Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");}

日志太大对其进行分割----按照文件大小

# 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示)
log4j.rootLogger = trace,rollingFile
# 配置RollingFileAppender 输出方式 日志输出到哪里,输出到文件
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
# 表示输出的格式
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
# 自定义layout输出的内容
log4j.appender.rollingFile.layout.conversionPattern =  [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n
# 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性
log4j.appender.rollingFile.file = E://test//log4j.log
# 配置输出的字符编码
log4j.appender.rollingFile.encoding = utf-8
# 指定日志文件内容大小 1兆b 超过就进行拆分
log4j.appender.rollingFile.maxFileSize = 1MB
# 指定日志拆分的数量
log4j.appender.rollingFile.maxBackupIndex = 5
@Test
public void test06() {/*将日志输出到文件中日志太多了,不方便管理怎么维护FileAppender为我们提供了好用的子类来进一步对文件输出进行处理RollingFileAppenderDailyRollingFileAppender1、RollingFileAppender这个类表示按照文件的大小来进行拆分的方式进行操作配置文件进行RollingFileAppender的相关配置如何拆分,观察RollingFileAppender的源码protected long maxFileSize = 10*1024*1024;表示拆分文件的大小,默认是10mprotected int  maxBackupIndex  = 1; 拆分文件的书名# 指定日志文件内容大小 1兆b 超过就进行拆分log4j.appender.rollingFile.maxFileSize = 1MB# 指定日志拆分的数量log4j.appender.rollinFile.maxBackupIndex = 5只要文件超过1MB,那么则会生成另外一个文件,文件的数量最多是5个文件1 记录日志 1MB文件2 记录日志 1MB......文件5 记录日志 1MB如果5个文件不够怎么办,作为日志管理来说,也不可能让日志无休止的继续增长下去所以,覆盖策略,按照时间来进行覆盖,原则就是保留新的,覆盖旧的*/Logger logger = Logger.getLogger(Log4jTest.class);for (int i = 0; i < 10000; i++) {logger.fatal(i + "fatal信息" );logger.error(i + "error信息");logger.warn(i + "warn信息");logger.info(i + "info信息");logger.debug(i + "debug信息");logger.trace(i + "trace信息");}

日志太大对其进行分割----按照时间大小

配置文件

# 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示)
log4j.rootLogger = trace,dailyRollingFile
# 配置DailyRollingFileAppender 输出方式 日志输出到哪里,输出到文件
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
# 表示输出的格式
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
# 自定义layout输出的内容
log4j.appender.dailyRollingFile.layout.conversionPattern =  [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n
# 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性
log4j.appender.dailyRollingFile.file = E://test//log4j.log
# 配置输出的字符编码
log4j.appender.dailyRollingFile.encoding = utf-8
# 根据时间来进行拆分
# 设置DatePattern属性为'.'yyyy-ww 这个是按照周来进行拆分日志
log4j.appender.dailyRollingFile.datePattern = '.'yyyy-MM-dd HH-mm-ss

相关文章:

log4j学习

依赖 <!--log4j依赖--> <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency><!--测试--> <dependency><groupId>org.junit.jupiter</g…...

【Vue2+3入门到实战】(4)Vue基础之指令修饰符 、v-bind对样式增强的操作、v-model应用于其他表单元素 详细示例

目录 一、今日学习目标1.指令补充 二、指令修饰符1.什么是指令修饰符&#xff1f;2.按键修饰符3.v-model修饰符4.事件修饰符 三、v-bind对样式控制的增强-操作class1.语法&#xff1a;2.对象语法3.数组语法4.代码练习 四、京东秒杀-tab栏切换导航高亮1.需求&#xff1a;2.准备代…...

【数据结构和算法】找到最高海拔

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 前缀和的解题模板 2.1.1 最长递增子序列长度 2.1.2 寻找数组中第 k 大的元素 2.1.3 最长公共子序列…...

redis相关问题

1、概述&#xff1a; 1. 非关系型数据库 2. 是分布式缓存数据库 3. 使用 key -value结构存储 2、作用&#xff1a; 用作缓存降低数据库压力&#xff0c;提高性能&#xff1b;可以用作消息队列&#xff08;削峰、解耦、异步调用&#xff09; 3、基础语法&#xff1a; 基础命令…...

第41节: Vue3 watch函数

在UniApp中使用Vue3框架时&#xff0c;你可以使用watch函数来观察和响应Vue实例上的数据变化。以下是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用watch函数&#xff1a; <template> <view> <input v-model"message" type"text…...

Centos7:升级gcc、g++到版本5.2.0

背景 Centos7.9版本默认的g版本是4.8.5&#xff0c;在实践golang项目中&#xff0c;用到C14&#xff0c;编译时会报错&#xff1a;gcc: error: unrecognized command line option ‘-stdc14’ 因此&#xff0c;gcc需要升级到更高版本&#xff0c;我这里使用源码编译形式升级到g…...

Pytohn data mode plt

文章目录 文件的读写创建.csv类型的文件&#xff0c;并读取文件创建.xlsx文件 使用Python做图生成数据集切片取值操作修改张量中指定位置的数据 知识点torch.arange(x)torch.tensor(2)Atorch.randn(36).reshape(6,6)shapenumel()reshape(x,y,z)torch.zeros(3,3,4)torch.ones(2,…...

内网离线搭建之----kafka集群

1.系统版本 虚拟机192.168.9.184 虚拟机192.168.9.185 虚拟机192.168.9.186系统 centos7 7.6.1810 2.依赖下载 ps&#xff1a;置顶资源里已经下载好了&#xff0c;直接用&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;…...

5.1 显示窗口的内容(一)

一&#xff0c;如何显示窗口的内容&#xff1f; 显示器用于在物理硬件&#xff08;如计算机显示器或触摸屏显示器&#xff09;上显示窗口的内容。 屏幕API提供的功能允许我们创建同时写入多个窗口和显示的应用程序。屏幕支持多个显示器&#xff0c;但创建和管理使用多个显示器…...

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…...

关于Python里xlwings库对Excel表格的操作(十八)

这篇小笔记主要记录如何【设置单元格数据的对齐方式】。前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安装导入xlwings库&#xff1b; &#xff08;2&#xff09;如何在Wps下…...

VScode远程连接服务器,Pycharm专业版下载及远程连接(深度学习远程篇)

Visual Code、PyCharm专业版&#xff0c;本地和远程交互。 远程连接需要用到SSH协议的技术&#xff0c;常用的代码编辑器vscode 和 pycharm都有此类功能。社区版的pycharm是免费的&#xff0c;但是社区版不支持ssh连接服务器&#xff0c;只有专业版才可以&#xff0c;需要破解…...

Vue2和Vue3组件间通信方式汇总(3)------$bus

组件间通信方式是前端必不可少的知识点&#xff0c;前端开发经常会遇到组件间通信的情况&#xff0c;而且也是前端开发面试常问的知识点之一。接下来开始组件间通信方式第三弹------$bus,并讲讲分别在Vue2、Vue3中的表现。 Vue2Vue3组件间通信方式汇总&#xff08;1&#xff09…...

PyTorch加载数据以及Tensorboard的使用

一、PyTorch加载数据初认识 Dataset:提供一种方式去获取数据及其label 如何获取每一个数据及其label 总共有多少的数据 Dataloader:为后面的网络提供不同的数据形式 数据集 在编译器中导入Dataset from torch.utils.data import Dataset 可以在jupyter中查看Dataset官方文档&…...

TensorFlow是什么

TensorFlow是什么 Tensorflow是一个Google开发的第二代机器学习系统&#xff0c;克服了第一代系统DistBelief仅能开发神经网络算法、难以配置、依赖Google内部硬件等局限性&#xff0c;应用更加广泛&#xff0c;并且提高了灵活性和可移植性&#xff0c;速度和扩展性也有了大幅…...

docker-compose 安装Sonar并集成gitlab

文章目录 1. 前置条件2. 编写docker-compose-sonar.yml文件3. 集成 gitlab4. Sonar Login with GitLab 1. 前置条件 安装docker-compose 安装docker 创建容器运行的特有网络 创建挂载目录 2. 编写docker-compose-sonar.yml文件 version: "3" services:sonar-postgre…...

支付平台在选择服务器租用时要注意什么?

如果要建设一个支付平台的话要进行服务器租用&#xff0c;一旦涉及到钱的方面就必须要顾虑到多方面&#xff0c;这样才能保证安全性&#xff0c;今天小编就给大家讲一讲要注意什么呢&#xff1f; 1、带宽:带宽是业务稳定性的直接因素&#xff0c;只有带宽充足&#xff0c;这样…...

IDEA2018升级2023,lombok插件不兼容导致get/set方法无法使用

1、问题 最近了解到一款叫CodeGeeX 的智能编程助手&#xff0c;想要试用一下&#xff0c;但是IDEA2018版本太低了&#xff0c;没有CodeGeeX插件&#xff0c;于是打算将IDEA升级到2023.2.5版本&#xff0c;具体升级过程略过&#xff0c;升级完成后&#xff0c;启动项目&#xf…...

企业微信服务商代开发模式获取授权企业的客户信息

服务商代开发素材&#xff1a; 服务商可信ip 企业微信认证 测试时不用再次创建一个企业微信&#xff0c;可以用当前的企业微信作为授权企业使用一、创建代开发应用模板 1&#xff0c;代开发模板回调URL配置 参考 注意&#xff1a;保存代开发应用模板时的corpId是服务商的企业…...

库存管理方法有哪些

库存管理是工作中一个离不开的话题&#xff0c;不管是仓管还是业务员都或多或少接触过库存管理方面的工作&#xff0c;例如&#xff1a;进货、销售、库存盘点等等这些都属于库存管理的范筹&#xff0c;那么库存管理方法有哪些&#xff1f;用哪种方法管理库存比较好&#xff0c;…...

数字化车间推动制造业生产创新

一、数字化车间应用场景 1&#xff1a;资源智能化管理 数字化车间通过搭建智能化的设备监测系统&#xff0c;实时采集和监控设备的运行状态和生产数据&#xff0c;对设备进行实时管理和维护&#xff0c;降低故障率和维修成本。同时&#xff0c;通过对生产过程中的数据采集和分…...

Linux的安装及管理程序

一、如何在linux安装卸载软件 1. 编译安装 灵活性较高 难度较大 可以安装较新的版本 2. rpm安装&#xff08;redhat&#xff09; linux 包安装 查软件信息&#xff1a;是否安装&#xff0c;文件列表 rpm 软件名 3. yum yum是RPM升级版本&#xff0c;解决rpm的弊端 安装软件 首…...

c语言-表达式求值

目录 前言一、隐式类型转换1.1 整型提升 二、算术转换三、操作符的属性四、问题表达式总结 前言 表达式求值的顺序一部分由操作符的优先级和结合性决定。 有些表达式的操作数在求值的过程中可能需要转换为其他类型 一、隐式类型转换 隐式类型转换是在编译器自动进行的类型转换…...

小型洗衣机哪个牌子质量好?口碑最好的四款小型洗衣机推荐

随着科技的快速发展&#xff0c;现在的人们越来越注重自己的卫生问题&#xff0c;不仅在吃上面会注重卫生问题&#xff0c;在用的上面也会更加严格要求&#xff0c;而衣服做为我们最贴身的东西&#xff0c;我们对它的要求也会更加高&#xff0c;所以最近这几年较火爆的无疑是内…...

springCould中的Ribbon-从小白开始【5】

目录 1.什么是Ribbo❤️❤️❤️ 2.eureka自带Ribbon ❤️❤️❤️ 3. RestTemplate❤️❤️❤️ 4.IRule❤️❤️❤️ 5.负载均衡算法❤️❤️❤️ 1.什么是Ribbo 1.Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端,负载均衡的工具。2.主要功能是提供客户端的软件…...

持续集成交付CICD:Jira 发布流水线

目录 一、实验 1.环境 2.GitLab 查看项目 3.Jira 远程触发 Jenkins 实现合并 GitLab 分支 4.K8S master节点操作 5.Jira 发布流水线 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注master1K8S master节点1.20.6192.168.204.180 jenkins…...

JuiceSSH结合内网穿透实现公网远程访问本地Linux虚拟机

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …...

使用 pytest.ini 文件控制输出 log 日志

一、前置说明 pytest.ini 文件中可以配置参数来控制 pytest 的运行行为,其存放路径要求与 conftest.py 一样。 项目根目录project_root/ ├── pytest.ini ├── tests/ │ └── test_demo.py以test开头的测试子目录project_root/ ├── tests/ │ ├── pytest.in…...

【Spring】SpringBoot 配置文件

文章目录 什么是配置文件SpringBoot配置文件配置文件快速入手配置文件的格式properties 配置文件说明properties 基本语法读取配置文件信息properties 配置格式缺点 yml 配置文件说明yml 基本语法使用 yml 连接数据库 yml 使用进阶yml 配置不同数据类型配置对象配置集合配置Map…...

Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享

作者&#xff1a;索增增&#xff08;小红书&#xff09;、宋泽辉&#xff08;小红书&#xff09;、张佐玮&#xff08;阿里云&#xff09; 背景介绍 Koordinator 是一个开源项目&#xff0c;基于阿里巴巴在容器调度领域多年累积的经验孵化诞生&#xff0c;目前已经支持了 K8s…...

网游逆向分析与插件开发-游戏反调试功能的实现-项目需求与需求拆解

上一个专栏结束位置&#xff1a;网游逆向分析与插件开发-代码保护壳的优化-修改随机基址为固定基址-CSDN博客 上一个专栏是做了一个壳有了一定的保护&#xff0c;但是保护还是不够&#xff0c;最大的保护是根上把问题解决了&#xff0c;就是我不允许你对我进行调试&#xff0c…...

阶段七-GitEE

Git&#xff1a;版本控制软件 Git的优点 1.1 协同修改 多人并行不悖的修改服务器端的同一个文件。 1.2 数据备份 不仅保存目录和文件的当前状态&#xff0c;还能够保存每一个提交过的历史状态。 1.3 版本管理 在保存每一个版本的文件信息的时候要做到不保存重复数据&…...

Redis小记(1)

目录 1.Redis和Mysql的区别 2.Redis常用命令 1.Redis和Mysql的区别 a:mysql和redis的存储方式不同 mysql是关系型数据库&#xff0c;用表来进行存储数据。 redis是通过键值对来存储数据&#xff0c;key使用string来标识&#xff0c;value可以是各种不同的数据结构。 b:mys…...

Flutter windows 环境配置

Flutter windows 环境配置 从零开始&#xff0c;演示flutter环境配置到启动项目&#xff0c;同时支持 vscode 和 android studio 目录 Flutter windows 环境配置一、环境配置1. Flutter SDK2. Android Studio3. JDK4. 拓展安装5. Visual Studio 2022二、项目创建和启动1. vsco…...

odoo17核心概念view5——ir_ui_view.py

这是view系列的第5篇文章&#xff0c;介绍一下view对应的后端文件ir_ui_view.py&#xff0c;它是base模块下的一个文件 位置&#xff1a;odoo\addons\base\models\ir_ui_view.py 该文件一共定义了三个模型 1.1 ir.ui.view.custom 查询数据库这个表是空的&#xff0c;从名字看…...

截断整型提升算数转换

文章目录 &#x1f680;前言&#x1f680;截断&#x1f680;整型提升✈️整型提升是怎样的 &#x1f680;算术转换 &#x1f680;前言 大家好啊&#xff01;这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换 看这一篇要先会前面阿辉讲的数据的存储否则可能看不…...

阿里云 ECS Docker、Docker Compose安装

https://help.aliyun.com/document_detail/51853.html https://docs.docker.com/compose/install/ Centos https://blog.csdn.net/Alen_xiaoxin/article/details/104850553 systemctl enable dockerdocker-compose安装 https://blog.csdn.net/qq465084127/article/details/…...

LeetCode——1276. 不浪费原料的汉堡制作方案

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff0c;给你两个数tomatoSlices和cheeseSlices&#xff0c;然后每制作一个巨无霸汉堡则消耗4个tomatoSlices和1和cheeseSlices&#xff0c;每制作一个小皇堡则需要消耗2个tomatoSlices和1和cheeseSlices。问给你这两个…...

隆道吴树贵:生成式人工智能在招标采购中的应用

12月22日&#xff0c;由中国招标投标协会主办的招标采购数字发展大会在北京召开&#xff0c;北京隆道网络科技有限公司总裁吴树贵受邀出席大会&#xff0c;并在“招标采购数字化交易创新成果”专题会议上发言&#xff0c;探讨生成式人工智能如何在招标采购业务中落地应用。 本次…...

docker搭建kali及安装oneforall

前期docker的安装这里就不用多说了&#xff0c;直接看后面的代码 安装oneforall 1.安装git和pip3 sudo apt update sudo apt install git python3-pip -y2.克隆项目 git clone https://gitee.com/shmilylty/OneForAll.git3.安装相关依赖 cd OneForAll/ sudo apt install pyt…...

【MySQL】数据库之事务

目录 一、什么是事务 二、事务的ACID是什么&#xff1f; 三、有哪些典型的不一致性问题&#xff1f; 第一种&#xff1a;脏读 第二种&#xff1a;不可重复读 第三种&#xff1a;幻读 第四种&#xff1a;丢失更新 四、隔离级别有哪些&#xff1f; &#xff08;1&#xf…...

AGV|RGV小车RFID传感器CNS-RFID-01/1S的RS232通讯联机方法

CNS-RFID-01/1S广泛应用于AGV小车&#xff0c;搬运机器人&#xff0c;无人叉车等领域&#xff0c;用于定位&#xff0c;驻车等应用&#xff0c;可通过多种通讯方式进行读写操作&#xff0c;支持上位机控制&#xff0c;支持伺服电机&#xff0c;PLC等控制设备联机&#xff0c;本…...

【Python可视化系列】一文教会你绘制美观的热力图(理论+源码)

一、问题 前文相关回顾&#xff1a; 【Python可视化系列】一文彻底教会你绘制美观的折线图&#xff08;理论源码&#xff09; 【Python可视化系列】一文教会你绘制美观的柱状图&#xff08;理论源码&#xff09; 【Python可视化系列】一文教会你绘制美观的直方图&#xff08;理…...

百度Apollo五步入门自动驾驶:Dreamview与离线数据包分析(文末赠送apollo周边)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…...

为什么IPv6 可以作为低功耗蓝牙的物联网体系结构?

蓝牙40规范引人了低功耗蓝牙(Bluetooth Low Energy,BLE)技术。低牙是一种低能低延成本的无线通信技术。 与传统蓝牙相比&#xff0c;低功耗蓝牙同样使用24GHz频段,但其将信道重新划分为 40个&#xff0c;包含37 个数据信道和3个广播信道(传统蓝牙共使用 79 个信道)低功蓝牙的协…...

GPT每预测一个token就要调用一次模型

问题&#xff1a;下图调用了多少次模型&#xff1f; 不久以前我以为是调用一次 通过看代码是输出多少个token就调用多少次&#xff0c;如图所示&#xff1a; 我理解为分类模型 预测下一个token可以理解为分类模型&#xff0c;类别是vocab的所有token&#xff0c;每一次调用都…...

运维工程师的出路到底在哪里?

1.35岁被称为运维半衰期&#xff0c;主要是因为运维工作的技术栈和工作方式在不断更新和演进。随着新技术的出现和发展&#xff0c;老旧的技术逐渐被淘汰&#xff0c;运维工作也需要不断学习和适应新技术&#xff0c;否则就容易被市场淘汰。 2.要顺利过渡半衰期&#xff0c;运…...

2312clang,基于访问者的前端动作

原文 基于RecursiveASTVisitor的ASTFrontendActions. 创建用RecursiveASTVisitor查找特定名字的CXXRecordDeclAST节点的FrontendAction. 创建FrontendAction 编写基于clang的工具(如Clang插件或基于LibTooling的独立工具)时,常见入口是允许在编译过程中执行用户特定操作的F…...

怎么搭建实时渲染云传输服务器

实时渲染云传输技术方案&#xff0c;在数字孪生、虚拟仿真领域使用越来越多&#xff0c;可能很多想使用该技术方案项目还不知道具体该怎么搭建云传输服务器&#xff0c;具体怎么使用实时云渲染平台系统。点量云小芹将对这两个问题做集中分享。 一、实时渲染服务器怎么搭建&…...

如何在生产环境正确使用Redis

一、在生产环境使用Redis 如果在生产环境使用Redis&#xff0c;需要遵守一定的使用规范&#xff0c;以保障服务稳定、高效。。 1.1、明确Redis集群的服务定位 1、仅适用于缓存场景&#xff1a;Redis定位于高性能缓存服务&#xff0c;强调快速读写和低延迟的特性&#xff0c;…...