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

2022-09-01 23:15:29

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

我正在做的项目将使用WicketSpringHibernate。我知道Wicket和Hibernate使用Java的简单日志记录立面(SL4J),而Spring正在使用Apache Commons的日志记录组件

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

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

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

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

还有我的最后一个问题。在我正在启动的项目中,您是否建议我将SL4J用于我自己的日志记录目的?(我以为我会直接使用log4j,但那是在我学习更多关于日志记录的知识之前,许多受人尊敬的库似乎都选择桥梁/立面的路径来满足他们的日志记录需求。如果它在不增加成本的情况下为我们提供了灵活性,那么没有理由不这样做。

我期待着从您那里听到更多关于您如何进行日志记录的信息。这对我来说是一个新的领域,我渴望提高自己。


答案 1

好吧,SLF4J只是一个门面,就像公共日志记录一样,这意味着他们仍然需要其他东西来工作。它们允许库作者不强制用户使用多个日志记录库和配置。Log4j 和 logback 是常规的日志记录库。

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

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

现在,你只需要使用slf4j-logj12.jar让共享资源日志记录和slf4j使用log4j(或者你选择的任何其他东西;顺便说一句,logback不需要额外的库来与slf4j一起使用)作为支持引擎。

因此,您的应用程序将具有

  • jcl104-over-slf4j.jar (将雅加达公地伐木桥接到 slf4j)
  • slf4j.jar (用于休眠和其他使用 slf4j)
  • slf4j-logj12.jar (对于 slf4j 使用 log4j 作为后端)
  • log4j.jar(供应用程序使用。所有配置也将在此处完成)

答案 2

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

  • 从类路径中删除。如果您使用的是Maven,并且在摆脱共享资源日志记录时遇到问题,请参阅此内容commons-logging.jar

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

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

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

PS:顺便说一句,JCL = 雅加达共享资源日志记录


推荐