【问题标题】:When using Log4J2, should I code to SLF4J or Log4J2 API?使用 Log4J2 时,我应该编写 SLF4J 还是 Log4J2 API?
【发布时间】:2016-01-25 08:38:47
【问题描述】:

什么被认为是更好的做法? 如果我编码为 SLF4J,我会获得 Log4J2 的所有好处吗? 会影响性能吗? 对于 JCL,上述所有问题的答案是否相同?

【问题讨论】:

  • @Thilo - 这部分回答了我的问题。我会根据我的 API 层获得不同的性能吗?
  • 实际上,投票赞成的答案是关于 log4j 1.2(不是 2.0)。也许忽略那个线程......我想知道是否有人在许多 Java 日志框架之间的混淆成本上投入了大量资金。
  • 简而言之,SLF4J 是首选。性能几乎完全取决于仍将使用 LOG4J2 xml 文件完成的配置。 SLF4J 和 LOG4J2 都支持参数化日志记录,应该使用它来提高性能。
  • 使用 SLF4J 的唯一真正缺点也可以被认为是一种奖励。 api 更简单,灵活性较低(即,没有自定义日志级别,所有对象都必须参数化,throwables 必须是最后一个 arg)等等。从处理一个非常大的日志项目的经验来说,虽然你失去了一些好处使用 log4j2 api 的灵活性,您可以通过更简单的实现来获得它,这在未来更容易重构。

标签: logging slf4j log4j2 apache-commons-logging


【解决方案1】:

作为 Log4j 2 的开发人员,我当然有偏见。如果您使用标记并对其进行过滤,我会推荐 Log4j 而不是 SLF4J。 SLF4J 与 Markers 有一些并发问题。如果您想利用 Log4j 对记录消息而不是字符串的支持,那么当然,您必须使用 Log4j 的 API。如果您想使用 printf 风格的 API 进行日志记录,则必须使用 Log4j API。如果您想使用 Java 8 lambda 表达式,则必须使用 Log4j API。

OTOH,如果您对 SLF4J API 非常满意并且不想要任何附加功能,那么使用它的性能成本应该是最低的。

我还应该注意,可以写入 Log4j 2 API 并将其路由到 SLF4J。

【讨论】:

  • 从 LOG4J2 路由到 SLF4J 的意义何在?使用 slf4j simple 一点都不吸引人……
  • 重点是,即使您的应用程序使用 Log4j 2 API,您也不一定要绑定到 Log4j 2 实现:您仍然可以在不更改应用程序代码的情况下切换到另一个日志记录实现。
猜你喜欢
  • 2022-01-18
  • 2019-05-11
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2019-01-18
  • 2021-02-16
相关资源
最近更新 更多