- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有生以来第一次发现自己正在编写一个开源的 Java API。希望被包括在许多其他项目中。
对于日志记录,我(以及与我一起工作的人)一直使用 JUL ( java.util.logging
) 并且从未遇到任何问题。但是现在我需要更详细地了解我应该为我的 API 开发做什么。我对此做了一些研究,根据我得到的信息,我变得更加困惑。因此这篇文章。
因为我来自 JUL,所以我对此有偏见。我对其余部分的了解并不多。
根据我所做的研究,我得出了人们不喜欢 JUL 的以下原因:
log.finest("Lookup request from username=" + username
+ ", valueX=" + valueX
+ ", valueY=" + valueY));
我的 IDE 会警告我并征得我的许可,它应该将其更改为: log.log(Level.FINEST, "Lookup request from username={0}, valueX={1}, valueY={2}",
new Object[]{username, valueX, valueY});
..我当然会接受。许可授予 !谢谢您的帮助。 for (int i = 0; i < noOfExecutions; i++) {
for (char x=32; x<88; x++) {
String someString = Character.toString(x);
// here we log
}
}
(我希望 log 语句具有原始数据类型(在本例中为 int)和更复杂的数据类型(在本例中为 String)。不确定这很重要,但您已经拥有了。)
logger.info("Logging {} and {} ", i, someString);
JUL 的日志语句:
logger.log(Level.INFO, "Logging {0} and {1}", new Object[]{i, someString});
在实际测量完成之前,JVM 会通过执行一次相同的测试来“预热”。在 Windows 7 上使用 Java 1.7.03。使用最新版本的 SLF4J (v1.6.6) 和 Logback (v1.0.6)。标准输出和标准错误被重定向到空设备。
getSourceClassName()
上。因为 JUL 默认在输出中打印源类名称,而 Logback 不会。所以我们正在比较苹果和橙子。我必须再次进行测试并以类似的方式配置日志记录实现,以便它们实际上输出相同的内容。然而,我怀疑 SLF4J+Logback 仍然会名列前茅,但与上面给出的初始数字相差甚远。敬请关注。
java.util.logging.SimpleFormatter.format="%4$s: %5$s [%1$tc]%n"
这根本没有改变上述时间。我的分析器显示记录器仍然花费大量时间调用
getSourceClassName()
即使这不是我的模式的一部分。图案无所谓。
getLogger()
call 比 JUL 的同上贵很多。 (如果我的分析器准确,则为 95 毫秒与 0.3 毫秒)。这是有道理的。 SLF4J 需要在底层日志实现的绑定(bind)上做一些事情。这不会吓到我。这些调用在应用程序的生命周期中应该很少见。牢度应该在实际的日志调用中。
Properties
也可以这样说作为一个例子,但我们不考虑抽象,这样人们就可以插入他们自己的配置库和你有什么。我认为原因是
Properties
刚好位于柱线上方,而今天的 7 月正好相反……而在过去,它的出现为零,因为它不存在。
最佳答案
免责声明 : 我是log4j、SLF4J和logback项目的创始人。
选择 SLF4J 是有客观原因的。其一, SLF4J 允许最终用户自由选择底层日志框架 .此外,精明的用户往往更喜欢logback which offers capabilities beyond log4j , j.u.l 远远落后。功能方面的 j.u.l 可能对某些用户来说就足够了,但对许多其他用户来说则不然。简而言之,如果日志记录对您很重要,您可能希望使用带有 logback 的 SLF4J 作为底层实现。如果日志记录不重要,则 j.u.l 很好。
但是,作为 oss 开发人员,您需要考虑用户的偏好,而不仅仅是您自己的偏好。因此,您应该采用 SLF4J 不是因为您确信 SLF4J 比 j.u.l 更好,而是因为大多数 Java 开发人员目前(2012 年 7 月)更喜欢 SLF4J 作为他们的日志记录 API。如果您最终决定不关心大众意见,请考虑以下事实:
Except the end user could have already done this customization for his own code, or another library that uses log4j or logback. j.u.l is extensible, but having to extend logback, j.u.l, log4j and God only knows which other logging framework because he uses four libraries that use four different logging frameworks is cumbersome. By using SLF4J, you allow him to configure the logging frameworks he wants, not the one you have chosen. Remember that a typical project uses myriads of libraries, and not just yours.
关于java - 为什么不使用 java.util.logging?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11359187/
我在这个网站上发布的代码有这个问题 https://developers.google.com/drive/quickstart-cs是 Google Drive 快速入门的开发人员站点。我按照网站上
我正在尝试制作一个非常简单的 Kafka Producer,目前正在关注 producer example除了我的制作人没有分区程序类。 将所需文件导出到 jar 后,我将它们传输到我的 Linux
问题 在java中,我有一个“Util项目”,在进行单元测试时使用另一个“Mock项目”。 我的问题是“模拟项目”也使用“Util项目”来构建一些模拟对象。 当我使用 Maven 构建项目时,我无法构
据我所知,这些包已经存在很长时间了。但是,我从未见过它们的实际用法。而且这些包似乎不成熟,不再维护。如果是,为什么这些包现在存在? 最佳答案 包裹automata被 scala.xml.dtd 使用,
关闭。这个问题需要debugging details .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 Improve this question Co
在java.util.Collections中,有一个方法: public static void fill(List list, T obj) 用第二个参数指定的对象填充第一个参数指定的List。
我不明白它要我做什么。分配给 sentence正在工作: val sentences : java.util.List[CoreMap] = document.get(classOf[Sentence
在我的 React 应用程序中,我想使用一些实用程序。我见过两种不同的方法。第一个是,只是创建函数并将其导出。第二个是,创建一个 Util 类并导出一个对象,这样它就不能被实例化(静态类)。 clas
我有一个 util 类,它接受 String jwtToken 和 Key key 并使用 io.jsonwebtoken.jwts 解码 jwt。 但是,我无法对此进行测试。原因是,我无法模拟公钥并
我有使用目标命名空间的专有架构 xmlns:ax216="http://util.java/xsd" 这给我带来了从 java (java.util.xsd) 开始生成禁止的(由 Java 安全管理器
我正在阅读集合以查看 Javadocs 中的实现层次结构。 Collections声明为public class Collections extendds Object Collection声明为pu
我正在使用 Spring-boot 应用程序,我可以在其中连接 Azure 应用程序配置。但是当我尝试使用内容类型应用程序/JSON 读取值时出现错误。 我的Java类 @ConfigurationP
我正在使用 Spring-boot 应用程序,我可以在其中连接 Azure 应用程序配置。但是当我尝试使用内容类型应用程序/JSON 读取值时出现错误。 我的Java类 @ConfigurationP
我在使用格式说明符时遇到问题。这是否意味着我正在使用 %d? public static void main(String[] args) { double y, x; for (x =
鉴于此代码 import java.util.Iterator; private static List someList = new ArrayList(); public static void
我正在 HackerEarth 解决问题,我无法弄清楚为什么我的程序在命令行上正确运行并给出正确的结果,但在代码编辑器上运行时却给出 java.util.NoSuchElementException
我正在尝试使用以下代码使用对象列表列表中的数据填充tableModel readExcel.readSheet(0): TableModel tableModel = new DefaultTabl
java.util.Set 、 java.util.List 和其他 Collection 接口(interface)不可序列化。需要一个简单、直接的解决方案来在可序列化的 POJO 中使用它。 pu
我试图从 servlet 返回数据库搜索结果的 ArrayList 以显示在 jsp 页面上。 在servlet中设置arraylist作为请求的属性,并将请求转发到jsp页面。当我尝试在 jsp 页
我是android新手,最近我试图从firebase中提取数据到recyclerview/cardview中以垂直布局显示数据,它显示将Hashmap转换为Arraylist的错误,其中代码是:
我是一名优秀的程序员,十分优秀!