23

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

我正在做的项目将使用WicketSpringHibernate。我知道 Wicket 和 Hibernate 使用 Java 的 Simple Logging Facade ( SL4J ),并且 Spring 使用的是Apache Commons 的日志组件

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

我可以将它们全部设置为将日志数据输出到一个通用文件中吗?或者我应该使用单独的文件?还是应该将日志消息存储在数据库中?(我宁愿不这样做,因为我发现对文本文件进行 grepping 等非常方便。)

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

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

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

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

4

2 回答 2

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(供您的应用程序使用。所有配置也将在此处完成)
于 2009-01-20T19:16:14.807 回答
13

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

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

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

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

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

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

于 2009-01-20T19:25:57.783 回答