成都建设网站费用广告网站 源码

pingmian/2025/10/7 18:31:30/文章来源:
成都建设网站费用,广告网站 源码,wordpress接收表单,网站代码编辑器前言 呵呵 最近想要 做一个 mongo 低版本的客户端读取高版本的服务端传递过来的数据造成的一个错误的时候, 出现了这样的问题 引入了 mongo-java-driver 之后, 使用相关 api 的时候会触发 com.mongo.internal.connection.BaseCluser 的初始化, 其依赖的 Loggers 间接的依赖…前言 呵呵 最近想要 做一个 mongo 低版本的客户端读取高版本的服务端传递过来的数据造成的一个错误的时候, 出现了这样的问题   引入了 mongo-java-driver 之后, 使用相关 api 的时候会触发 com.mongo.internal.connection.BaseCluser 的初始化, 其依赖的 Loggers 间接的依赖的是 org.slf4j.LoggerFactory 来获取 logger  然后 启动一个简单的 public static void main, 之后就 StackOverflow 了  稍微看了一下, 是由于 log4j-slf4j-impl 和 log4j-to-slf4j 依赖, 导致的一个比现的一个问题  因此 来一个 case 看一下 具体的情况  也顺便 看了一下 slf4j 和 log4j, 以及他们的一些关联关系, 之前 也是稀里糊涂的复制过来直接使用, 没有怎么关注这个  简单的来说 slf4j 是一套接口, 一套约束, 适配了各种实现, slf4j-api.jar 属于接口的约束, log4j-slf4j-impl 属于 log4j 适配 slf4j 系列接口的具体的实现  log4j 是一种具体的日志输出的实现, 和 logback, slf4j-simple, jdk的Logger 都属于具体的 impl  测试用例 依赖如下 dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion2.10.0/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-to-slf4j/artifactIdversion2.13.2/version/dependency 测试用例 package com.hx.test;import org.slf4j.Logger; import org.slf4j.LoggerFactory;/*** Test01LoggerStackOverflow** author Jerry.X.He 970655147qq.com* version 1.0* date 2021-10-23 12:08*/ public class Test01LoggerStackOverflow {// loggerpublic static final Logger LOGGER LoggerFactory.getLogger(Test01LoggerStackOverflow.class);// Test01LoggerStackOverflowpublic static void main(String[] args) {LOGGER.error(Hello World);}}启动之后抛出异常如下, 是在 LoggerFactory.getLogger 的时候  Exception in thread main java.lang.StackOverflowErrorat org.apache.logging.log4j.util.StackLocatorUtil.getCallerClass(StackLocatorUtil.java:55)at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:42)at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:355)at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:355)at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29) 问题的调试 这个问题 我们要关注两个地方, 一个是 LoggerFactory 的选择, 一个是 LoggerContextFactory 的选择  slf4j-simple 里面的实现就相对简单, 直接通过 LoggerFactory 创建 Logger  但是 log4j-slf4j-impl 里面需要实际工作的 Logger 是 log4j 的 Logger, log4j 中构建 Logger 需要构建 LoggerContext, 并基于 LoggerContext 来创建 Logger  LoggerFactory 的选择 首先来看一下 LoggerFactory 的一些初始化的地方   这里获取 Slf4jServiceProvier 是通过 serviceloader 来实现的, 我们这里只能够获取到一个 provider, 这个 是 log4j-slf4j-impl 里面的一个具体的实现  比如我现在增加一个 slf4j-simple 的一个实现, 那么 这里可以获取到两个 Slf4jServiceProvier  存在多个 Slf4jServiceProvider 的情况下, 就会输出我们常见的如下日志信息, 并且日志中输出了 选择的是哪一个 Slf4jServiceProvider, 选择的规则是选择第一个   LoggerContextFactory 的选择  我们来具体看一下 log4j-slf4j-impl 里面 LoggerFactory 创建 Logger 的具体的实现  看这里创建了一个 context, 并使用 context 创建 Logger, 按道理来说, 我们期望这个 context.getLogger 应该是一个具体的创建 Logger 的地方  但是可以看到这里的 context 的到的是一个 Slf4jLoggerContext[是在 log4j-to-slf4j.jar 的包中], 这个 context 里面没有创建 Logger, 而是吧创建 Logger 的业务委托给了 org.slf4j.LoggerFactory, 所以 这里就构成了一个没有退出边界的递归, 造成了 StackOverflow  我们来看一下 正常的的情况下, 可以看到 这里获取到的 LoggerContext 是 log4j-core 下面的  然后实际的工作, 也是创建真实的 log4j 的 Logger   为什么 log4j-slf4j-impl 和 log4j-to-slf4j 都存在的时候, 会选择到 Slf4jLoggerContext 呢 ? AbstractLoggerAdapter 中创建 LoggerContext 是委托给了 LogManager  LogManager 中创建 LoggerContext 取决于具体的 factory, 也就是 LoggerContextFactory  ProviderUtil 中使用 servicelaoder 加载对应的 Provider 加载了两个, 一个是 Log4jContextFactory, 一个是 Slf4jLoggerContextFactory, 并且 Slf4jLoggerContextFactory 的优先级比 Log4jContextFactory 要高, 因此优先选择的是 Slf4jLoggerContextFactory  这两个 Provider 分别是来自于 log4j-slf4j-impl 和 log4j-to-slf4j 这两个包中  所以 如果你不需要 log4j-to-slf4j 的话, 可以直接排除掉这个包避免问题  当然 还有其他一些方式, 搞一个优先级更高的 Provider  假设我们调整一下 Log4jContextFactory 的优先级 可以按到这里将  Log4jContextFactory 的优先级调整到了 20, 因此选择的 LoggerContextFactory 是 Log4jContextFactory, 做了真实的事情  然后 最终程序运行正常, 符合我们期望的结果  log4j-to-slf4j.jar 是干什么? 看一下 Slf4jLogger, 实现的 log4j 的接口, 入参是 slf4j 的 Logger, 那就是一个 slf4j 适配 log4j 的一个工具类 Slf4jLoggerContext 的内容, 主要是从上下文获取 slf4j 的 Logger, 然后将它转换成 Slf4jLogger[实现的是 log4j 的接口] slf4j1.7.x 版本和 slf4j1.8.x 版本的上述流程的差异 主要的差异在于 1.7.x 版本中 Slf4jServiceProvider 的角色为 StaticLoggerBinder   并且 1.7.x 中加载 StaticLoggerBinder 是基于 classloader 加载的, 不是基于 serviceloader 加载的 完

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

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

相关文章

网站的系统建设方式有哪些内容一套会员管理系统多少钱

1、 MSDN原版系统(我告诉你) [软件、镜像下载地址](https://www.imsdn.cn/)2、 HelloWindows.cn 精校 完整 极致 Windows系统下载仓储站 镜像、软件下载地址 3、系统库 镜像下载地址 4、 山己几子木 镜像下载地址

个人网站每年要多少钱拓者设计吧效果图

第一次使用react和antd组件库&#xff0c;记录过程中实用的几个组件和使用方法&#xff1b; 项目中依赖版本 "react": "^18.2.0", "antd": "^5.3.0",Input关闭历史填充 <Input placeholder"请输入ID/名称" allowClear a…

星级酒店网站建设公司企业微网站与手机微信

Vue构建项目断点调试过程问题总结 问题背景 前端开发过程中&#xff0c;碰到问题时需要debug&#xff0c;快速分析和解决问题。一般除了console.log的方式打印日志外&#xff0c;更方便直观的方式就是打断点debug。本文对vue项目debug过程可能碰到的问题进行总结&#xff0c;…

iis添加网站建设中网站建设以后主要做什么

Mocha Pro 2022 mac是一款专业的三维摄像机反求摩卡跟踪插件&#xff0c;同时也是一款视频后期效果制作工具&#xff0c;Mocha Pro 2022下载能够给数字媒体艺术家提供强大的、直观的和创新的追踪解决方案用简化的界面、加速的工作流程以及轻松追踪和操作镜头的强大性&#xff0…

虚拟主机 2个网站微信小程序 网站建设

问题描述 给定整数 n n n&#xff0c;在 O ( 1 ) O(1) O(1) 时间求出 n n n 有多少个因子。 问题背景 \qquad 目前网上求因子个数的方法的时间复杂度都是 O ( n ) O(\sqrt{n}) O(n ​) 级别的&#xff0c;但我认为一定有一种方法可以在 O ( 1 ) O(1) O(1) 的时间求出 n…

网站维护中要多久才能重新进入中国纪检监察报电子版2021

Kafka3.0之前依赖于zookeeper Zookeeper开源&#xff0c;分布式的架构&#xff0c;提供协调服务&#xff08;apache项目&#xff09; 基于观察者模式设计的分布式服务管理架构 存储和管理数据&#xff0c;分布式节点上的服务接受观察者的注册&#xff0c;一旦分布式节点上的…

设计对网站的重要性中国软件这个公司怎么样

DIY电脑一直都是电脑爱好者非常喜欢的&#xff0c;对于电脑爱好者来说&#xff0c;通过自己动手DIY组装电脑&#xff0c;不仅可以更为深刻的认识硬件&#xff0c;了解电脑主机内部结构&#xff0c;还能够学习到安装系统等知识&#xff0c;从中可以带来很多乐趣。今天我们为大家…

造价网站wordpress手机版受钱吗

设置cmd窗口的标题 1、打开.bat文件编辑 2、输入命令&#xff1a; title&#xff08;窗口标题&#xff09; 比如&#xff1a;title计算机 3、保存 4、双击运行.bat文件 &#xff0c;窗口标题改变成功 改变窗口大小 1、打开.bat文件编辑 2、输入命令&#xff1a; mode co…

前端进入网站建设公司怎么样在线编辑网页

1.查看centos内核版本 uname -a uname -r2.安装之前的准备工作 安装RabbitMQ必装Erlang(RabbitMQ官网添加链接描述) 2.1.Erlang简介 Erlang是一种通用的面向并发的编程语言&#xff0c;它由瑞典电信设备制造商爱立信所辖的CS-Lab开发&#xff0c;目的是创造一种可以应对…

如何在线上销售自己的产品优化师和运营区别

1423. 可获得的最大点数 原题地址&#xff1a; 力扣每日一题&#xff1a;可获得的最大点数 几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#xff0c;最终你必须正好拿…

凡科做网站类型应该做哪个小程序和网站的区别

有序集合类型 (Sorted Set) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。有序集合的存储元素值也是不能重复的,但分值是可以重复的。 当我们把学生的成绩存储在有序集…

网站建设首选原创先锋产品推销方案

优化 Cocos Creator 包体体积是一个重要的任务&#xff0c;可以通过以下几个方面进行优化&#xff1a; 图片文件体积优化&#xff1a; 压缩图片&#xff1a;使用工具如 TinyPNG、ImageOptim 等对图片进行压缩&#xff0c;减小文件大小而保持可接受的质量。图片格式选择&#…

12306网站开始是谁开发的企业门户 登录

[导读]微信再次迎来历史性大更新&#xff0c;小程序终于展露腾讯野心&#xff01;微信再次迎来历史性大更新&#xff0c;小程序终于展露腾讯野心!...微信小程序桌面在昨日1月22日晚&#xff0c;微信更新7.0.3版本&#xff0c;腾讯在App Store中只表示&#xff1a;本次是一次小更…

农产品网站管理员怎么做猎头公司收费标准

责任链设计模式详解 一、定义 责任链设计模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许多个对象有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合。这种模式将这些对象连接成一条链&#xff0c;并沿着…

兰州网站建设托管平面设计适合女生学吗

在JSP中&#xff0c;可以使用response.sendRedirect("");来重定向&#xff0c;但这条语句不会终止函数执行&#xff0c;即执行完这条语句之后&#xff0c;后面的语句还会执行&#xff0c;这就会造成一些问题。 例如有如下显示店铺的控制器&#xff0c;如果用户设置类…

一键安装网站运行环境知乎 上海做网站的公司

虚拟内存与物理内存之间的映射 用户空间映射到物理内存是独立的&#xff0c;提高安全性修改内存访问级别 &#xff08;0是最高级&#xff09;

南宁做网站哪家公司好深圳专业学校网站建设

今天小编想要推荐的基金是定投基金(易方达上证50指数A)(数据信息来源&#xff1a;天天基金网)一、基金的概况二、投资范围本基金的股票投资部分主要投资于标的指数的成分股票,包括上证50指数的成分股和预期将要被选入上证50指数的股票,还可适当投资一级市场申购的股票(包括新股…

已有域名 做网站google官网入口下载

引言 如果需要进行代码的移植&#xff0c;肯定少不了在另一台pc或者服务器上进行环境的搭建&#xff0c;那么首先是要知道在已有的工程的代码中用到了哪些包&#xff0c;此时&#xff0c;如果是用人工去一个一个的代码文件中去查看调用了哪些包&#xff0c;这个工作甚是繁琐。…

山东省建设厅职业资格注册中心网站html网站地图生成

1. 什么是决策树&#xff1f; 决策树是最早的机器学习算法之一&#xff0c;起源于对人类某些决策过程 的模仿&#xff0c;属于监督学习算法。 决策树的优点是易于理解&#xff0c;有些决策树既可以做分类&#xff0c;也可以做回归。在排名前十的数据挖掘算法中有两种是决策树[1…

网站页面用什么软件做移动互联网 网站建设

建议130&#xff1a;以复数命名枚举类型&#xff0c;以单数命名枚举元素 枚举类型应该具有负数形式&#xff0c;它表达的是将一组相关元素组合起来的语义。比如&#xff1a; enum Week{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday} 在这里&#xff0c;Week对于星…