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

23 java logging log4j apache-commons slf4j

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

我正在做的项目将使用Wicket,SpringHibernate.我知道Wicket和Hibernate使用Simple Logging Facade for Java(SL4J),Spring正在使用Apache Commons日志记录组件.

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

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

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

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

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

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

Lok*_*oki 20

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

有关详细信息,请参见此处

SLF4J有一个公共日志记录桥,可用于替换公共日志记录库.我认为那里的模式很好地解释了这种情况.

现在,您只需要使用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(供你的应用程序使用.所有配置也将在这里完成)

  • 停止疯狂.有没有人认为伐木变得太复杂了?我认为log4j是一个了不起的东西,值得成为一个标准.我没有密切关注JCP的历史,知道为什么Sun决定走自己的路.这是荒唐的.我使用ACL + log4j. (14认同)
  • 切记不要将slf4j-xxxx.jar与xxxx-over-slf4j.jar混淆.前者用于汇集到您想要的日志框架(log4j,logback等),后者用于替换使用的日志框架. (2认同)

Oli*_*ier 13

以下是如何将所有内容重定向到SLF4J:

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

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

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

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

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