使用SL4J,Jakarta Commons日志记录,log4j记录第三方库和我自己的代码

时间:2009-01-20 18:48:48

标签: java logging log4j apache-commons slf4j

我有一些关于日志记录的问题,更具体地说是关于日志记录的设置并确保它有效。

我正在做的项目将使用WicketSpringHibernate。我知道Wicket和Hibernate使用Simple Logging Facade for Java(SL4J)而Spring正在使用logging component from Apache Commons

他们会幸福地共存吗? 我以为我会将log4j与SL4J和Apache公共的日志记录组件一起使用,您认为这是个好主意吗?

我可以将它们全部设置为将日志记录数据输出到公共文件中吗? 或者我应该使用单独的文件? 或者我应该将日志消息存储在数据库中? (我不愿意,因为我发现文本文件上的grepping等非常方便。)

对于Spring,我想我需要某种配置文件用于Apache Commons日志记录组件以及我指示它使用log4j吗?

当我设置它们时,我想看到一切正常我将日志记录级别设置为INFO,因为它相当确定所有三个框架在该模式下输出一些信息?或者是否有更好的方法来确保?

我的最后一个问题。在我刚开始的项目中,您是否建议我使用SL4J进行自己的日志记录? (我以为我会直接使用log4j,但那是在我学习更多关于日志记录之前,很多可敬的库似乎选择了桥/门面的路径来满足他们的日志记录需求。如果它在没有添加的情况下获得我们的灵活性成本没有理由不这样做。)

我期待听到更多关于你如何进行伐木的信息。这对我来说是一个新领域,我渴望提升自己。

2 个答案:

答案 0 :(得分:20)

SLF4J只是一个外观,就像公共记录一样,这意味着他们仍然需要其他工作。它们允许库作者不强迫用户拥有多个日志库和配置。 Log4j和logback是常规的日志库。

有关详细信息,请参阅here

SLF4J有commons logging bridge可用于替换公共日志记录库。我认为那里的模式很好地解释了这种情况。

现在,您只需要使用slf4j-logj12.jar进行公共日志记录,并且slf4j使用log4j(或您选择的任何其他内容;顺便说一下,logback不需要额外的库与slf4j一起使用)作为后备引擎

您的申请将具有

  • jcl104-over-slf4j.jar(桥接jakarta commons记录到slf4j)
  • slf4j.jar(用于hibernate和其他人使用slf4j)
  • slf4j-logj12.jar(对于slf4j使用log4j作为后端)
  • log4j.jar(供您的应用程序使用。所有配置也将在这里完成)

答案 1 :(得分:13)

以下是将所有内容重定向到SLF4J的方法:

  • 从类路径中删除commons-logging.jar。如果您正在使用Maven并且无法摆脱公共日志记录,请参阅this

  • jcl-over-slf4j.jar放入类路径中(它出现在SLF4J发行版中)。这是模仿JCL类的替代品,但在内部调用SLF4J。这将负责Spring以及使用JCL的任何其他框架。

slf4j-xxx.jar放在类路径中,将SLF4J连接到您喜欢的后端(Log4J,Logback ...)。配置后端以将所有类别记录到一个文件中,您就完成了。

至于在您的应用程序中使用SLF4J,并非绝对必要。像JCL和SLF4J这样的库最初是为那些编写库但不想将客户端锁定到特定日志框架的人设计的。

PS:顺便说一下,JCL = Jakarta Commons Logging