使用 Log4J2 时,我应该编码为 SLF4J 还是 Log4J2 API?

When using Log4J2, should I code to SLF4J or Log4J2 API?

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

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

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

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