Answers:
Logback本机实现SLF4J API。这意味着,如果您使用的是logback,则实际上是在使用SLF4J API。从理论上讲,您可以直接使用logback API的内部结构进行日志记录,但是不建议这样做。记录器上的所有注销文档和示例均根据SLF4J API编写。
因此,通过使用logback,您实际上将使用SLF4J,并且如果出于任何原因想要切换回log4j,只需在几分钟之内将slf4j-log4j12.jar放到类路径中,就可以这样做。
从logback迁移到log4j时,仍然需要将logback特定部分(尤其是logback.xml配置文件中包含的部分)迁移到其log4j等效项,即log4j.properties。在向另一个方向迁移时,需要将log4j配置(即log4j.properties)转换为其等效的logback。有一个在线工具。迁移配置文件所涉及的工作量远少于迁移在所有软件的源代码及其依赖项中分发的记录器调用所需要的工作量。
你应该? 是的。
紧急吗 也许不会。
不会痛吗?可能吧,但这可能取决于您的日志记录语句。
请注意,如果您真的想充分利用LogBack(或SLF4J),那么您确实需要编写适当的日志记录语句。这将带来一些优势,例如由于延迟求值而使代码更快,并且由于可以避免使用防护措施而减少了代码行。
最后,我强烈推荐SLF4J。(为什么要用自己的外墙重新制作轮子?)
在日志记录世界中,有Facades(例如Apache Commons Logging,slf4j甚至Log4j 2.0 API)和实现(Log4j 1 + 2,java.util.logging,TinyLog,Logback)。
基本上,您应该用slf4j IF替换您的自制包装纸,并且仅当您由于某种原因对它不满意时。尽管Apache Commons Logging并未真正提供现代API,但slf4j和新的Log4j 2外观却提供了该API。鉴于很多应用程序都使用slf4j作为包装器,因此使用它可能是有意义的。
slf4j提供了许多不错的API糖,例如slf4j docs中的示例:
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
它是变量替换。Log4j 2也支持此功能。
但是,您需要知道slf4j是由QOS开发的,后者还维护着logback。Log4j 2.0在Apache Software Foundation中诞生。在过去的三年中,一个充满活力和活跃的社区再次发展起来。如果您对开放源代码感到满意,因为它是由Apache软件基金会(Apache Software Foundation)做出的,所有这些保证都可以使您重新考虑使用slf4j,而直接使用Log4j 2。
请注意:
过去,log4j 1并未积极维护,而Logback却没有。但是今天情况有所不同。Log4j 2会得到积极维护,并且几乎会定期发布。它还包括许多现代功能,并且-imho-比Logback更好。有时候,这只是一个品味问题,您应该得出自己的结论。
我对Log4j 2.0的新功能进行了快速概述:http : //www.grobmeier.de/the-new-log4j-2-0-05122012.html
阅读时,您会看到Log4j 2受到Logback以及其他日志记录框架的启发。但是代码库是不同的。它与Log4j 1几乎不共享任何内容,而与Logback共享零。这导致了一些改进,例如在示例Log4j 2中使用字节流而不是后台操作String。同样,它在重新配置时不会丢失事件。
Log4j 2可以比我知道的其他框架更快地记录日志:http : //www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html
而且用户社区似乎仍然比Logbacks大得多:http : //www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html
综上所述,最好的主意是您选择最适合您想要实现的记录框架。如果禁用生产环境中的日志记录,而仅在我的应用程序中执行基本日志记录,则不会切换完整的框架。但是,如果您对日志记录做更多的事情,只需查看框架及其开发人员提供的功能。尽管您通过QOS获得了对Logback的商业支持(我听说),但是目前对Log4j 2没有商业支持。另一方面,如果您需要执行审计日志记录并且需要异步附加程序提供的高性能,那么对检查log4j 2。
请注意,尽管它们提供了所有的舒适感,但外墙始终会降低性能。它可能根本不会影响您,但是如果您的资源不足,则可能需要保存所有可用的东西。
没有更好地了解您的需求,几乎不可能给出建议。公正:不要仅仅因为很多人就改变而切换。仅因为看到它的价值而进行切换。log4j已死的论点不再有效。它还活着,很热。
免责声明:我目前是Apache Logging Services的副总裁,并且也参与log4j。
不能完全回答您的问题,但是如果您可以离开自制包装器,那么可以使用Hibernate现已改用的Java简单日志记录外观(SLF4J)(而不是普通日志记录)。
SLF4J没有任何类加载器问题或Jakarta Commons Logging(JCL)所观察到的内存泄漏问题。
SLF4J支持JDK日志记录,log4j和logback。因此,在适当的时候从log4j切换到logback应该相当容易。
编辑:我没有说清楚自己的道歉。我建议使用SLF4J使自己不必在log4j或logback之间做出艰难的选择。