gpt4 book ai didi

java - 对使用 Spring 和 Hibernate 的 Java 日志系统感到困惑

转载 作者:IT老高 更新时间:2023-10-28 13:53:51 27 4
gpt4 key购买 nike

在部署我的 Spring/Hibernate 应用程序时,我收到以下与日志记录相关的警告:

log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

令我惊讶的是,Google/SO 搜索中缺少信息。唯一相关的是这篇 SO 帖子 Problem with Commons Logging / Log4j setup in spring webapp with tomcat 6

但是,这甚至超出了我的范围。有人可以在这里澄清正在使用的日志系统,或者指向我关于此事的最近资源(有一些古老的谷歌搜索结果并不真正适用)。具体来说,我正在努力解决的问题是:

  • commons-logging、log4j、slf4j 和 JCL 的区别。我的理解是 slf4j 是一个包装器,而 commons-logging 和 log4j 是实际的实现。我不知道 JCL 适合哪里。

  • 如何为 Spring 配置日志记录。 web.xml 文件中有什么,我需要 log4j.properties 文件还是 log4j.xml 文件?在 WEB-INF 中它在哪里?我的 applicationContext.xml 文件中有什么内容吗? (对不起,我需要从零开始)。

  • 我在我的项目中使用 Hibernate,包括通过 Maven。似乎 Hibernate 使用 slf4j-simple。我看到警告说我不能在类路径上同时拥有 slf4j-simple 和 slf4j-log4j。我没有包含 slf4j-log4j 作为依赖项,但 Hibernate 必须包含它。我该如何解决这个问题?我可以强制 Hibernate 使用 log4j 吗?

任何帮助将不胜感激。谢谢。


编辑:

感谢到目前为止的所有答案。我正在尝试这些建议。 spring web-app 具体怎么样?我已经看到了监听器和参数的示例以及放入 web.xml 文件中的内容。这也需要吗?

最佳答案

  • commons-loggingSLF4J都是围绕其他日志实现的 API 包装器。 SLF4J 是两者中更现代的,而且功能更强大。 Log4j是一个日志实现,几乎是事实上的标准。 JUL (java.util.logging 的缩写)是 JRE 附带的(通常很糟糕)日志记录实现。另一个日志实现是 logback ,它正在慢慢获得关注,但还没有普及。
  • log4j.propertieslog4j.xml 是配置 log4j 的不同方式,两者同样有效。您使用哪一个取决于您,尽管某些应用程序服务器会指定其中一个。阅读 log4j manual了解如何配置它。
  • 如果 Hibernate 使用 SLF4J 作为其 API,那是 Hibernate 开发人员的选择。但是,您可以选择 SLF4J 将委托(delegate)给哪个日志记录实现。再次阅读 slf4j manual了解如何选择您选择的实现。

是的,这一切都相当困惑。给定一个开放的选择,SLF4J 和 Logback 是最有能力的组合,但你通常没有一个开放的选择。不同的框架(如 Hibernate 和 Spring)可能会使用不同的日志 API,通常是 commons-logging 或 SLF4J,但您可以让所有这些 API 最终记录到相同的底层实现(通常是 log4j)。

关于java - 对使用 Spring 和 Hibernate 的 Java 日志系统感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2113350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com