您应该从库代码登录吗?


Answers:


33

是的你应该。使用SLF4J之类的日志记录外观可为您提供灵活性,而不会因特定的日志记录框架而给用户带来负担。

广泛分发的组件和库的作者可以针对SLF4J接口进行编码,以避免在组件或库的最终用户上强加日志记录框架。因此,最终用户可以在部署时通过在类路径上插入相应的slf4j绑定来选择所需的日志记录框架,稍后可以通过在类路径上将现有绑定替换为另一个绑定并重新启动应用程序来进行更改。事实证明,这种方法非常简单且非常可靠。

另外,如果您的用户不包括SLF4J jar(根据用户指南):

从SLF4J 1.6.0版开始,如果在类路径上未找到绑定,则slf4j-api将默认为无操作实现,丢弃所有日志请求。

如果您担心日志记录对性能的影响,请查看此SLF4J FAQ条目。这个想法是您提供参数来记录语句,而不是将它们添加到内联的String中:

以下两行将产生完全相同的输出。但是,在禁用日志记录语句的情况下,第二种形式的效果将比第一种形式好至少30倍。

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);

SLF4J还是另一个伐木门面吗?

SLF4J在概念上与JCL非常相似。因此,可以将其视为另一个伐木外观。但是,SLF4J的设计要简单得多,并且可以说更坚固。简而言之,SLF4J避免了困扰[Jakarta Commons Logging]的类加载器问题。


有没有一个好的开源库可以记录您可以指向的库代码?这样我们可以看到它是如何完成的?
user1870400

Spring框架是一个相当著名的Java库,它可以执行此操作。他们选择了JCL。
Mike Partridge

17

是的,您应该从库代码登录。它不仅可以帮助您开发,而且使用该库的人会发现它很有用。请记住,您始终可以将日志记录级别设置为仅显示所需的日志语句-并且它们可以执行相同的操作。

最近,我正在使用Mybatis(一种开源的ORM工具)。我正在调试一个我认为应该正确的查询,但未返回任何结果。这是一个参数化查询,并且由于Mybatis在其库代码中记录了日志,因此我能够将其打开并查看正在运行的实际查询。很容易看出我交换了两个参数。如果没有登录库,我几乎不可能很快找到问题所在。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.