假设有一个应用程序,它直接使用log4j
,i。即没有slf4j
或任何其他包装器。现在,我想将log4j
替换为logback
。我应该使用slf4j
(或任何其他包装器)吗?什么被认为是“良好做法”?
答案 0 :(得分:4)
您肯定应该使用slf4j API,如果您以后决定返回log4j或其他东西,您只需要更改slf4j桥,并且您的应用程序日志代码将无需更改即可使用。此外,如果您访问http://www.slf4j.org/,您将看到slf4j将Logback视为其本机实现,Logback实际上本机实现了SLF4J API。
答案 1 :(得分:1)
您可以使用log4j-over-slf4j.jar
代替" real"进行迁移,而无需更改任何代码。 Log4J一个。这为客户端提供了与Log4J相同的API,但是将日志记录调用指向SLF4J,SLF4J又可以将它们发送到logback。
但是如果您可以选择修改代码,那么我建议将其更改为使用SLF4J,然后您可以根据需要交换任何后端(logback,log4j等)。你不能做的一件事是尝试将log4j-over-slf4j
与Log4J后端结合起来......
答案 2 :(得分:1)
使用SLF4J api有一个很好的理由,无论实际的日志后端如何,即
log.debug("Foo: {}, Bar: {}", foo, bar);
参数构造。 Log4j总是需要一个完整的字符串来记录,这就是为什么你需要围绕if
来查看是否为昂贵的字符串启用了该语句。在进行检查之前,SLF4J不会调用foo.toString()或bar.toString(),因此禁用的调用很便宜。
因此我建议将您的源代码迁移到slf4j,并使用slf4j下载中的相应网桥将log4j用作后端。这将允许您像现在一样继续,无需进一步更改。如果需要,您可以将后端切换到logback。