Log4j2 + SLF4j打造日志系统
原创:Log4j2 + SLF4j打造日志系统 - 云+社区 - 腾讯云
2019-01-15阅读 2.3K0
目录
- 一:前言
- 二:添加依赖
- 2.1:去除直接和间接依赖的log4j1和SLF4j
- 2.2:添加依赖
- 三:xml配置
- 3.1:log4j2.xml常用demo
- 3.2:demo的优点
- 3.3:内容详解
- 3.4:demo变形
- 3.4.1:同步打印日志
- 3.4.2:全部异步打印日志
- 3.4.3:混合模式打印日志
- 四:其他
- 4.1:Log日志level
- 4.2:Log4j2与logback速度对比
一:前言
近期做一个项目打造项目的日志系统时,发现没有一个系统的学习,故准备系统学习一下日志系统,后续会有关于日志系统的其他介绍与总结,比如log4j2为什么这么快,其底层实现原理等。
java 界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,许多应用程序的日志部分都交给了 log4j,不过作为组件开发者,他们希望自己的组件不要紧紧依赖某一个工具,毕竟在同一个时候还有很多其他很多日志工具,假如一个应用程序用到了两个组件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了。
为了解决这个问题,JCL和SLF4j就出现了,JCL只提供 log 接口,具体的实现则在运行时动态寻找。这样一来组件开发者只需要针对JCL或者slf4j的接口开发,而调用组件的应用程序则可以在运行时搭配自己喜好的日志实践工具。跟 JCL 一样,SLF4J 也是只提供 log 接口,具体的实现是在打包应用程序时所放入的绑定器(名字为 slf4j-XXX-version.jar)来决定,XXX 可以是 log4j12, jdk14, jcl, nop 等,他们实现了跟具体日志工具(比如 log4j)的绑定及代理工作。举个例子:如果一个程序希望用 log4j 日志工具,那么程序只需针对 slf4j-api 接口编程,然后在打包时再放入 slf4j-log4j12-version.jar 和 log4j.jar 就可以了。
项目中我们选择了SLF4j+Log4j2来打造日志系统,log4j2的性能还是比Logback好一些的,下面有对比。
如果转载此博文,请附上本文链接:使用 Log4j2 + SLF4j 打造日志系统的全方位教程_李洋洋-CSDN博客_log4j2 over slf4j 谢谢合作~
二:添加依赖
2.1:去除直接和间接依赖的log4j1和SLF4j
首先我们应该先删除项目已经依赖的其他日志组件,这里指的是没有用到的日志组件,例如janusgraph会间接依赖log4j1的组件,这个组件删除就会报错,所以我们只要删除没有使用的日志组件,这样可以使项目更加干净~ 方法:我们可以观察项目目录下的External Libraries下的依赖文件,如果有log4j1或者其他日志依赖,我们将他们在pom文件中找到删除即可。
如果依赖中有但是pom文件中找不到,就是被间接依赖进来的了,我们在pom 文件中右击鼠标,选中Diagrams->show dependences就可以看到整个项目的依赖图,在其中找到对应的log依赖,选中右击Exclude即可。
2.2:添加依赖
添加的所有依赖都是截止2018.11.22日最新的稳定版本
<!--slf4j--> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.25</version><scope>runtime</scope> </dependency> <!--log4j2--> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.11.1</version> </dependency> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.11.1</version> </dependency> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>2.11.1</version><scope>runtime</scope> </dependency> <!--log4j2+slf4j--> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.11.1</version> </dependency>
上述的jcl-over-scf4j的作用以及原因: 即使现在你仍会看到很多程序应用 JCL + log4j 这种搭配,不过当程序规模越来越庞大时,JCL的动态绑定并不是总能成功,具体原因大家可以 Google 一下,这里就不再赘述了。解决方法之一就是在程序部署时静态绑定指定的日志工具,这也是 SLF4J 产生的原因。
现在还有一个问题,假如你正在开发应用程序所调用的组件当中已经使用了 JCL 的,还有一些组建可能直接调用了 java.util.logging,这时你需要一个桥接器(名字为 XXX-over-slf4j.jar)把他们的日志输出重定向到 SLF4J,所谓的桥接器就是一个假的日志实现工具,比如当你把 jcl-over-slf4j.jar 放到 CLASS_PATH 时,即使某个组件原本是通过 JCL 输出日志的,现在却会被 jcl-over-slf4j “骗到”SLF4J 里,然后 SLF4J 又会根据绑定器把日志交给具体的日志实现工具,这样就可以实现日志的统一了。如果你的项目没有使用jcl那么就不必添加这个。
上述的log4j-web是在开发web项目的时候需要的,如果你不是web项目,可以酌情删除
三:xml配置
3.1:log4j2.xml常用demo
在类路径下新建文件:log4j2.xml ,注意“2”不要缺少,位置放的正确并且文件名符合要求的话,项目会自动扫描到该配置文件。
Log4j2能够在初始化期间自动配置自身。当Log4j2启动时,它将找到所有ConfigurationFactory插件并按加权顺序从最高到最低排列。在交付时,Log4j包含四个ConfigurationFactory实现:一个用于JSON,一个用于YAML,一个用于 properties,一个用于XML,下面为查找加载顺序:
- Log4j2将检查“log4j.configurationFile”系统属性,如果设置,将尝试使用与文件扩展名匹配的ConfigurationFactory加载配置。
- 如果未设置系统属性,则ConfigurationFactory属性将在类路径中查找 log4j2-test.properties。
- 如果没有找到这样的文件,YAML ConfigurationFactory将在类路径中查找 log4j2-test.yaml或log4j2-test.yml。
- 如果没有找到这样的文件,JSON ConfigurationFactory将在类路径中查找 log4j2-test.json或log4j2-test.jsn。
- 如果找不到这样的文件,XML ConfigurationFactory将在类路径中查找 log4j2-test.xml。
- 如果找不到测试文件,ConfigurationFactory属性将在类路径上查找 log4j2.properties。
- 如果找不到属性文件,YAML ConfigurationFactory将在类路径上查找 log4j2.yaml或log4j2.yml。
- 如果找不到YAML文件,JSON ConfigurationFactory将在类路径上查找 log4j2.json或log4j2.jsn。
- 如果找不到JSON文件,XML ConfigurationFactory将尝试在类路径上找到 log4j2.xml。
- 如果找不到配置文件,则将使用DefaultConfiguration。这将导致所有日志记录输出转到控制台
log4j2.xml 文件内容:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO" monitorInterval="30"><properties><!--设置容器日志在硬盘上输出的目录--><property name="logPath">/opt/logs/renetwork/</property><!--设置项目日志在硬盘上输出的目录--><property name="logPathForProject">/opt/logs/renetwork/project/</property></properties><Appenders><!--=====容器日志配置=====--><!--设置在控制台打印日志--><Console name="Console" target="SYSTEM_OUT"><!--设置输出格式--><PatternLayout pattern="[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /></Console><!--设置级别为INFO日志输出到info.log中,filename为输出日志的目录,filepattern为压缩文件的命名规范与目录 --><RollingFile name="INFO" filename="${logPath}/info.log"filepattern="${logPath}/%d{YYYYMMdd}-%i-info.log.zip"><!--设置日志级别--><Filters><ThresholdFilter level="INFO"/></Filters><!--输出日志的格式--><PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /><Policies><!--设置每天打包日志一次--><TimeBasedTriggeringPolicy interval="1" modulate="true"/><!--设置日志文件满50MB后打包--><SizeBasedTriggeringPolicy size="50MB" /></Policies><!--设置最多保存20个日志文件,默认为7个--><DefaultRolloverStrategy max="20" /></RollingFile><!--设置级别为WARN日志输出到warn.log中--><RollingFile name="WARN" filename="${logPath}/warn.log"filepattern="${logPath}/%d{YYYYMMdd}-%i-warn.log.zip"><Filters><!--设置只输出级别为WARN的日志--><ThresholdFilter level="WARN"/><ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/></Filters><PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="50MB" /></Policies><DefaultRolloverStrategy max="20" /></RollingFile><!--设置级别为ERROR日志输出到error.log中--><RollingFile name="ERROR" filename="${logPath}/error.log"filepattern="${logPath}/%d{YYYYMMdd}-%i-error.log.zip"><!--设置只输出级别为ERROR的日志--><ThresholdFilter level="ERROR"/><PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="50MB" /></Policies><DefaultRolloverStrategy max="20" /></RollingFile><!--=====项目日志配置=====--><Console name="ConsolePro" target="SYSTEM_OUT"><PatternLayout pattern="[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /></Console><RollingFile name="INFOPro" filename="${logPathForProject}/info.log"filepattern="${logPathForProject}/%d{YYYYMMdd}-%i-info.log.zip"><Filters><ThresholdFilter level="INFO"/></Filters><PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="50MB" /></Policies><DefaultRolloverStrategy max="20" /></RollingFile><RollingFile name="WARNPro" filename="${logPathForProject}/warn.log"filepattern="${logPathForProject}/%d{YYYYMMdd}-%i-warn.log.zip"><Filters><ThresholdFilter level="WARN"/><ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/></Filters><PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="50MB" /></Policies><DefaultRolloverStrategy max="20" /></RollingFile><RollingFile name="ERRORPro" filename="${logPathForProject}/error.log"filepattern="${logPathForProject}/%d{YYYYMMdd}-%i-error.log.zip"><ThresholdFilter level="ERROR"/><PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="50MB" /></Policies><DefaultRolloverStrategy max="20" /></RollingFile></Appenders><Loggers><!--添加项目日志配置项目日志只输出com.bj58.renetwork下面的日志additivity="false" 表示只将该日志输出到该配置的路径下面,并不会再重复输出到root也就是容器日志中--><logger name="com.bj58.renetwork" level="debug" additivity="false"><appender-ref ref = "ConsolePro"/><appender-ref ref = "INFOPro"/><appender-ref ref = "WARNPro" /><appender-ref ref = "ERRORPro" /></logger><!--添加容器日志--><root level="INFO"><appender-ref ref = "Console"/><appender-ref ref = "INFO" /><appender-ref ref = "WARN" /><appender-ref ref = "ERROR" /></root></Loggers> </Configuration>
注释我写的应该比较清楚了,如果你还是不太明白,下面我会详细介绍一下。
3.2:demo的优点
- 将项目的日志和容器的日志分开打印到不同的文件夹中,这样便于查看与管理。比如,一个容器中部署了多个项目,如果不分开打印log的话所有的log都打印到容器的log中,所有项目和容器的log在一个文件中管理和查看的难度可以想象出来。如果每个项目一个对应的文件夹,所有的项目和容器都相互分开,将自己的日志打印到自己对应的日志文件中,简洁、方便查看、便于管理
- 将日志的info、warn、error级别的日志分开单独打印,INFO包含info\warn\error所有的日志,WARN使其只包含warn的日志,ERROR使其只包含error的日志,这样在发现错误和异常更加便利
- 将日志文件压缩存储,减少资源消耗
- 控制日志文件数量,在保证日志可追溯许可的范围下删除过早的日志文件,减少资源消耗
3.3:内容详解
1: 根节点Configuration有两个属性:status和monitorinterval
- status用来指定log4j2本身的打印日志的级别
- monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s
2:根节点下的子节点properties,用于定义变量和修改变量,这里我只定义了两个路径变量,一个是容器log路径,一个是项目log路径 3:根节点下的子节点Appenders,主要用于定义Appender,常见的有三种子节点:Console、RollingFile、File
log4j组件提供了好多种appender供我们使用,介绍看官网吧特别详细: Log4j – Log4j 2 Appenders
- Console节点用来定义输出到控制台的Appender.
- name:指定Appender的名字.
- target:SYSTEM_OUT(输出所有) 或 SYSTEM_ERR(只输出错误),一般只设置默认:SYSTEM_OUT.
- PatternLayout:输出格式,不设置默认为:%m%n.
- File节点用来定义输出到指定位置的文件的Appender.
- name:指定Appender的名字.
- fileName:指定输出日志的目的文件带全路径的文件名.
- PatternLayout:输出格式,不设置默认为:%m%n.
- RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender并且可以压缩文件.
- name:指定Appender的名字.
- fileName:指定输出日志的目的文件带全路径的文件名.
- PatternLayout:输出格式,不设置默认为:%m%n.
- filePattern:指定新建日志文件的名称格式.
- Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.
- TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am…而不是7am.
- SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.
- DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。
其中:fileName和filePattern不同的作用: fileName指定的是当天日志输出的日志输出位置 filePattern指的根据配置,对每天的日志文件进行压缩存储的时候的文件名,也就是新建的文件名
4:根节点下的子节点Loggers,用于配置上述添加的appender,两种子节点:Root、Logger
- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
- level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
- AppenderRef(appender-ref):Root的子节点,用来指定该日志输出到哪个Appender.
- Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等
- level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
- additivity : 设置是否继承,也就是是否将log也打印到Root下,“false”为不打印到Root下
- name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.
- AppenderRef(appender-ref):Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
5:输出格式相关:
- %t:线程名称
- %p:日志级别
- %c:日志消息所在类名
- %m:消息内容
- %M:输出执行方法
- %d:发生时间,%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2011-10-18 22:10:28,921
- %x::输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
- %L:代码中的行数
- %n:换行
- %c{*}系列:显示LoggerName的格式
我平常使用的就是:[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{2}:%L - %msg%n
3.4:demo变形
3.4.1:同步打印日志
同步打印日志是最消耗资源的方式,我们在开发的时候,可以选择使用全同步方式打印日志,这样便于我们debug。或者项目并发度不高的情况下也可以使用这种方式。但是,当并发量比较大、对项目响应速度敏感时并且对日志不是强实时性要求的话,最好还是使用全部异步或者混合方式。
上述的demo便是全部同步的案例。在此不再赘述。
3.4.2:全部异步打印日志
全部异步打印日志是对项目请求速度最理想的方式,在500个线程的情况下速度几乎是全同步打印log的10倍,是混合打印的2倍。下面是官网的比较图,可以对照着看一下:
异步Logger是让业务逻辑把日志信息放入Disruptor队列后可以直接返回,具有更高吞吐、调用log方法更低的延迟。但也有一些缺点比如:异常处理麻烦、 可变日志消息问题、更大的CPU开销、需要等待“最慢的Appender”消费完成。
所以我们在并发量高、日志实时性要求不高,并且所暴漏的缺点都可以容忍的情况下最好还是选用全部异步打印日志,这样可以获得更快的响应,也会给用户更好的体验。 异步打印配置有几种方式: 1:在你的classpath下面添加个log4j2.component.properties文件,并且添加以下内容:
这种方式不需要修改原来的log4j2.xml文件
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
2:使用异步标签,修改上面的demo的部分:
如果想要全部异步log的话,一定要所有的相关标签都是用异步标签
<Loggers><!--添加项目日志配置项目日志只输出com.bj58.renetwork下面的日志additivity="false" 表示只将该日志输出到该配置的路径下面,并不会再重复输出到root也就是容器日志中--><asyncLogger name="com.bj58.renetwork" level="debug" additivity="false"><appender-ref ref = "ConsolePro"/><appender-ref ref = "INFOPro"/><appender-ref ref = "WARNPro" /><appender-ref ref = "ERRORPro" /></asyncLogger><!--添加容器日志--><asyncRoot level="INFO"><appender-ref ref = "Console"/><appender-ref ref = "INFO" /><appender-ref ref = "WARN" /><appender-ref ref = "ERROR" /></asyncRoot></Loggers>
3:JVM启动参数(boot.ini)加上:
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
3.4.3:混合模式打印日志
混合模式就是既有一异步又有同步日志打印,那些部分需要同步或者异步,这需要根据具体对项目该部分的需求来定了.
下面我设置了项目日志同步打印,容器日志异步打印
<Loggers><!--添加项目日志配置项目日志只输出com.bj58.renetwork下面的日志additivity="false" 表示只将该日志输出到该配置的路径下面,并不会再重复输出到root也就是容器日志中--><logger name="com.bj58.renetwork" level="debug" additivity="false"><appender-ref ref = "ConsolePro"/><appender-ref ref = "INFOPro"/><appender-ref ref = "WARNPro" /><appender-ref ref = "ERRORPro" /></logger><!--添加容器日志--><asyncRoot level="INFO"><appender-ref ref = "Console"/><appender-ref ref = "INFO" /><appender-ref ref = "WARN" /><appender-ref ref = "ERROR" /></asyncRoot></Loggers>
四:其他
4.1:Log日志level
级别只输出“大于等于”自身级别的log,7中level的级别关系如下: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL 1. DEBUG : DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。 2. INFO INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。 3.WARN WARN level表明会出现潜在错误的情形。 4.ERROR ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。 5.FATAL FATAL level指出每个严重的错误事件将会导致应用程序的退出。 6.ALL ALL Level是最低等级的,用于打开所有日志记录。 7.OFF OFF Level是最高等级的,用于关闭所有日志记录。
4.2:Log4j2与logback速度对比
Log4j2和logback都是日志组件,logback就是为了替代log4j1出现的,log4j2是log4j1的升级版,几乎相当于重构了log4j1。 log4j2的效率可以在多线程时,在线程数量大的情况下,超过logback10倍左右!下面是官网提供的数据对比: 速度对比图(来自官网):
在Solaris和windows操作系统上的数据对比(来自官网):
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Java安全API
Java安全API目录概述小结:参考资料和推荐阅读LD is tigger forever,CG are not brothers forever, throw the pot and shine forever. Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, an…...
2024/4/19 9:17:25 - 制作正方体html+css3(动画)
<!DOCTYPE html> <html><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" content"IEedge"><title>实现一个正方体</title><meta name"viewport" content"widthde…...
2024/5/6 21:04:47 - pytorch搭建cnn网络学习记录
参考resnet,简单搭了一个cnn网络,这里记录一下。 任务是做一个猫狗识别,数据集是从kaggle上下的。 下面是网络搭建代码: import torch from torch import nn import torch.nn.functional as Fclass cnn(nn.Module):def __init__(…...
2024/4/25 8:17:04 - 黑马程序员并发编程笔记(二)--java线程基本操作和理解
3.java进程的基本操作 3.1.创建进程 方法一,直接使用 Thread // 构造方法的参数是给线程指定名字,,推荐给线程起个名字(用setName()也可以) Thread t1 new Thread("t1") {Override// run 方法内实现了要执行的任务public void …...
2024/5/4 16:22:08 - 你的网页有多快 — 从 DOMReady 到 Element Timing
总所周知,写文章需要一个标题。虽然我们搞代码的人一般都喜欢单刀直入,但是受制于文体的约束和发表载体的要求,有时不得不想一个标题。而起一个标题,不亚于起一个函数名或者变量名。单就这篇文章,我就有好几个草稿标题…...
2024/5/4 22:25:45 - SpringBoot源码分析
SpringBoot源码分析(二)之自动装配demo 文章目录SpringBoot源码分析(二)之自动装配demo前言一、创建RedissonTemplate的Maven服务二、创建测试服务三、总结前言 Spring Framework一致在解决如何让bean的管理更加简单,如何让开发者尽可能少的去管理bean生成的一些配…...
2024/5/4 15:00:01 - DevOps模式下测试左移和测试右移
一、什么是DevOps模式 可以参看我的上一篇文章:[什么是DevOps模式],本文主要介绍DevOps模式下测试左移和测试右移可以做的事项有哪些~(https://blog.csdn.net/baidu_28340727/article/details/122620748) 二、测试左移内容 2.1 PRD评审 这一点相信很多…...
2024/5/4 16:48:41 - Java小项目实训——扑克牌
项目要求: 一个窗口实现无序发放52张扑克牌;另一个窗口实现记录打出的扑克牌 Poke类 public class Poke {String name[] { "fang", "hong", "mei", "hei" };String a[] new String[52];String b[] new Stri…...
2024/4/5 4:01:14 - 【1.1 C案例】请君与我用C语言写一个千行的学生管理系统
一、本次目标 完成核心头文件前的所有准备工作,包含从VS2022创建新项目到第一个自定义头文件的编写。 GitHub:https://github.com/ITchujian/StudentManagementSystem_2022_C 注:为方便分享本次开发的经验,我将把分析过程以及代码…...
2024/5/4 23:05:06 - (数据库系统概论|王珊)第七章数据库设计-第三节:概念结构设计
文章目录一:E-R模型(1)两个实体之间的联系A:两个实体型之间的联系①:一对一联系(1:1)②:一对多联系(1:n)③:多对多联系(m:n࿰…...
2024/4/19 18:53:51 - [BUUCTF-pwn] codegate_prequals_2017_BabyMISC
越来越难了,跳过10道题后,作了个misc 程序很短 __int64 __fastcall main(int a1, char **a2, char **a3) {setbuf(stdout, 0LL);puts("[*] Ok, Lets Start. Input the write string on each stage!:)");if ( !sub_400EA8() ) …...
2024/5/4 21:05:12 - Leetcode70场双周赛-第四题2147. 分隔长廊的方案数
题目描述 2147. 分隔长廊的方案数 解题思想 进行一轮遍历,每次循环中,找三把椅子。记录第三把椅子的位置。只有在第三把椅子和第二把椅子之间可以放屏风,这两把椅子之间有可以通过下标相减得出。假如找不到第一把、第二把椅子,那…...
2024/4/14 2:59:04 - JavaSE数组练习
1、输出杨辉三角 2、冒泡排序 3、选择排序 4、插入排序 5、创建要给长度为6的int类型数组,要求数组元素的值再1-30之间,且随机赋值。同时要求数组元素各不相同...
2024/5/5 1:11:02 - 程序员,男,工作7年,android语音通话开发
你会发现前提之一就是学历达标了才有机会进入下一个环节,才有可能性进入最终的部门主管面试环节。没有学历,连HR那一关都过不了,更别说终极面试了。 而能力是铺路石,没有能力,你的职场路走不顺,而且走不远…...
2024/5/4 20:26:00 - Linux命令--统计多项--dstat--使用/教程/实例
原文网址: 简介 说明 本文介绍Linux的统计类命令:dstat。 dstat 是一个多功能产品,可以替换:vmstat iostat netstat ifstat。dstat扬长避短,即克服了这些命令的局限又增加了一些额外的功能,不但拥有更…...
2024/4/19 15:26:12 - Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现
Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 一、简单介绍 二、Car Racing 2D (2D赛车) 游戏内容与操作 三、相关说明 四、游戏代码框架 五、知识点 六、游戏效果…...
2024/5/4 22:31:11 - Java---Java SE基础--- 类型转换,运算符,数据输入
Java基础语法 1、类型转换问题 类型转换 在Java中,会存在不同类型的数据需要一起参与运算,所以这些数据类型之间是需要相互转换的,分为两种情况:自动类型转换和强制类型转换。 自动类型转换 *类型范围小的变量,可…...
2024/4/14 2:59:14 - FastDFS相关概念
FastDFS相关概念目录概 述小结参考资料和推荐阅读LD is tigger forever,CG are not brothers forever, throw the pot and shine forever. Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay …...
2024/5/4 21:50:36 - 2021-08-14
#gson com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Expect 1.该一异常是gson的 原因是服务端返回的json数据 与你生成的bean class 中某个字段 的数据类型不匹配。 。。常见的有 int 与long...
2024/4/7 17:35:58 - Python学习整理
Python语言学习总结 语雀...
2024/5/4 18:18:32
最新文章
- HFSS学习-day1-T形波导的内场分析和优化设计
入门实例--T形波导的内场分析和优化设计 HFSS--此实例详细步骤1.创建项目2.设置求解类型3.设置与建模相关的一些信息设置默认的建模长度单位 4.创建T形模型的三个臂基本参数端口激励进行复制 5.创建被挖去的部分设置正确的边界条件和端口激励方式添加求解设置添加扫频项检查一下…...
2024/5/7 0:46:45 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/6 9:38:23 - 【python】Flask Web框架
文章目录 WSGI(Web服务器网关接口)示例Web应用程序Web框架Flask框架创建项目安装Flask创建一个基本的 Flask 应用程序调试模式路由添加变量构造URLHTTP方法静态文件模板—— Jinja2模板文件(Template File)<...
2024/5/5 8:46:38 - jQuery(一)
文章目录 1. 基本介绍2.原理示意图3.快速入门1.下载jQuery2.创建文件夹,放入jQuery3.引入jQuery4.代码实例 4.jQuery对象与DOM对象转换1.基本介绍2.dom对象转换JQuery对象3.JQuery对象转换dom对象4.jQuery对象获取数据获取value使用val()获取…...
2024/5/4 22:17:11 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/6 9:21:00 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57