当前位置: 首页 > 面试题库 >

Apache Commons Logging的运行时发现算法有什么问题

蔡鹏程
2023-03-14
问题内容

Dave
Syer(SpringSource)在他的博客中写道:

不幸的是,关于公共日志的最糟糕的事情,以及它在新工具中不受欢迎的原因,也是运行时发现算法。

为什么?它的运行时发现算法有什么问题?性能?


问题答案:

为什么?它的运行时发现算法有什么问题?性能?

不,不是性能,而是类加载器的痛苦。JCL发现过程依赖于类装入器黑客在运行时查找日志记录框架,但是这种机制会导致许多问题,包括意外行为,难以调试的类装入问题,从而导致复杂性增加。Ceki(Log4J,SLF4J和Logback的作者)在采用commons-
logging
API

(还提到了使用JCL观察到的内存泄漏问题)之前,再次在Think中捕获了这一点。

这就是创建使用静态绑定的SLF4J的原因。

Ceki是SLF4J的作者,您可能会认为他的文章有偏见,但相信我,他们没有这样做,他正在提供大量参考文献(证据)来证明他的观点。

总结一下:

  • 是的,已知JCL已损坏,最好远离它。
  • 如果要使用日志记录外观(并非所有项目都需要),请使用SLF4J。
  • SLF4J为仍使用JCL的框架(如Spring :)提供了JCL到SLF4J的桥梁。
  • 我发现Logback是Log4J的继任者Logback,它是一种出色的日志记录实现。
  • Logback本机实现SLF4J API。这意味着,如果您使用的是Logback,则实际上是在使用SLF4J API。

也可以看看

  • Commons Logging是我的错
  • 在采用commons-logging API之前要三思
  • SLF4J VS JCL /动态绑定VS静态绑定


 类似资料:
  • 我认为这段代码是(logn)^2,因为每个findindex函数都需要logn深度,我们称之为logn时间?有人能证实这一点吗?我希望你们中的一个能把这当成一个小测验,帮我一下。 给定一个已旋转未知次数的n个整数的排序数组,编写代码在数组中查找一个元素。您可能假设数组最初是按递增顺序排序的。

  • 我试图实现一个无隐层神经网络来破解MNIST数据集。 我使用sigmoid作为激活函数,交叉熵作为损失函数。 为了简单起见,我的网络没有隐藏层,只有输入和输出。 这是我实现反向传播算法的一部分,但它没有按预期工作。损失函数的下降速度非常慢(我尝试了学习率从0.001到1的变化),准确度永远不会超过0.1。 输出如下:

  • 问题内容: 我看了这个关于表达式(以下简称“逗号操作”的问题)和MDN文档有关,但我想不出一个场景的地方是有用的。 那么,逗号运算符什么时候有用? 问题答案: 以下内容可能不是很有用,因为您不是自己编写的,但是压缩程序可以使用逗号运算符来缩小代码。例如: 会成为: 现在可以使用该运算符,因为逗号运算符(在一定程度上)允许将两个语句写为一个语句。 这 是 有用的,因为它允许一些整齐压缩(39 -这里

  • 本文向大家介绍map-reduce程序运行的时候会有什么比较常见的问题相关面试题,主要包含被问及map-reduce程序运行的时候会有什么比较常见的问题时的应答技巧和注意事项,需要的朋友参考一下 比如说作业中大部分都完成了,但是总有几个reduce一直在运行 这是因为这几个reduce中的处理的数据要远远大于其他的reduce,可能是因为对键值对任务划分的不均匀造成的数据倾斜 解决的方法可以在分区

  • 问题内容: 我有以下代码: 以及其他各种方法,例如@ Before,@ After,@ Test或@AfterClass方法。 测试在启动时不会像看起来的那样失败。有谁可以帮助我吗? 我有JUnit 4.5 该方法无法立即调用注释为@before的setUp()。类def是: 问题答案: 不要扩展TestCase并同时使用注释! 如果需要使用批注创建测试套件,请使用RunWith批注,例如: (按

  • 因为问题已经被问了很多次了,但我不能理解清楚。 根据提供的答案,JavaScript运行时意味着执行JavaScript代码的地方。 现在Nodejs的定义,它是一个异步的javascript运行时,这是否意味着在Nodejs内部执行javascript? 另外,javascript runtime environment,是指执行javascript代码的环境或机器设置吗? 对不起,我重复了我的