是否值得使用与log4j2 SLF4J是否值得使用与log4j2 SLF4J(Is it worth

2019-05-13 08:38发布

我不能决定是否使用SLF4J或不log4j2。 根据网上的帖子,看起来并不像它会有什么影响性能,但是是不是真的需要。

此外,这些点赞成log4j2规则:

  • SLF4J迫使你的应用程序登录的字符串。 log4j的2 API支持记录任何CharSequence的,如果你想记录的文字,而且还支持记录任何对象作为是。
  • log4j的2 API提供用于记录消息对象的Java 8 lambda表达式和免费垃圾日志记录(它避免了在创建可变参数阵列和记录的CharSequence对象时避免创建字符串)的支持。

Answer 1:

来吧:计划到log4j2 API,而不是SLF4J

它的安全:在Log4j2 API提供确切的同样的保障,SLF4J -以及更多。

现在Log4j2本身被分成一个API和实现模块,不再有使用SLF4J任何价值。

是的,这是良好的工程实践,以保持你的选择余地。 你可能想以后更改到其他日志实现。

在过去的10年左右,在应用程序中建立这样灵活使用封装API像SLF4J的意思。 这种灵活性不免费的午餐,但:这种方法的缺点是,你的应用程序无法使用底层日志库的丰富的功能集。

Log4j2提供,不需要您的应用程序被限制在最小公分母的解决方案。

泄阀:log4j的到SLF4J

Log4j2包括log4j-to-slf4j桥模块。 编码对Log4j2 API的任何应用程序可以选择随时切换的底层实现任何兼容SLF4J的实现。

正如在问题中提到,使用Log4j2 API直接提供了更多的功能,并有一些非功能性的优点与使用的封装API像SLF4J:

  • 消息API
  • Lambda表达式慵懒记录
  • 登录任何对象,而不仅仅是字符串
  • 垃圾分类:避免创建可变参数或创建字符串在可能的情况
  • 当你与他们完成CloseableThreadContext自动删除MDC项目

(见10 Log4j2 API功能不可用SLF4J的更多细节。)

应用程序可以安全地使用Log4j2 API的这些丰富的功能没有被锁定在本地Log4j2核心实现。

SLF4J依然是你的安全阀,它只是并不意味着你的应用程序代码应该对SLF4J API了。


披露:我对Log4j2贡献。


更新:似乎有一些混乱是编程为Log4j2 API莫名其妙地引入了“门面的门面”。 有一个在Log4j2 API和SLF4J之间在这方面没有什么区别。

这两种API都需要使用本机实现时2只依赖,以及4只依赖于非本地执行。 SLF4J和Log4j2 API在这方面是相同的。 例如:



文章来源: Is it worth to use slf4j with log4j2