使用Spring和Hibernate的Java Logging Systems感到困惑

D.C*_*.C. 15 java logging spring hibernate log4j

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

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

让我感到惊讶的是Google/SO搜索缺乏信息.唯一相关的是使用tomcat 6在Spring webapp中设置Commons Logging/Log4j的 SO 问题

然而,这甚至超出了我.有人可以在这里澄清游戏中的日志记录系统,或者指向我关于这个问题的最新资源(有一些古老的谷歌搜索结果并不真正适用).具体来说,我正在努力解决的问题是:

  • 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吗?

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


编辑:

谢谢你到目前为止的所有答案.我试试这些建议.具体来说,春季网络应用程序呢?我已经看到了侦听器和参数的示例以及诸如未放入web.xml文件的内容.这还需要吗?

ska*_*man 12

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

是的,这一切都令人困惑.如果有一个开放的选择,SLF4J和Logback是最有能力的组合,但你通常不会有一个开放的选择.不同的框架(如Hibernate和Spring)可能会使用不同的日志API,通常是commons-logging或SLF4J,但是你可以获得所有这些API,最终登录到相同的底层实现(通常是log4j).