我正在尝试从Hibernate 3.2升级到3.4,显然使用的是slf4j.我们的项目目前使用log4j.所以我的假设是我应该使用slf4j-log4j12包装实现.
Maven slf4j依赖是:
org.slf4j slf4j-log4j12 1.5.6
而log4j依赖是:
log4j log4j 1.2.15
slf4j-log4j12和log4j都引用了最新版本(我可以在Maven存储库中找到).当我运行我的应用程序时,Hibernate的日志记录失败:
java.lang.NoSuchFieldError: name at org.slf4j.impl.Log4jLoggerAdapter.(Log4jLoggerAdapter.java:75) at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:75) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103) at org.hibernate.cfg.Configuration. (Configuration.java:163) ...
我错过了什么?
编辑1:如果我从我的pom.xml中删除了log4j依赖项,我收到错误:
java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory at org.slf4j.LoggerFactory.(LoggerFactory.java:60) at org.hibernate.cfg.Configuration. (Configuration.java:163) ...
编辑2: 此博客声称问题是由使用错误版本的slf4j-api.jar的hibernate注释引起的.
我没有问题
org.hibernate hibernate-core 3.3.1.GA org.hibernate hibernate-annotations 3.4.0.GA
和
org.slf4j slf4j-api 1.5.6 org.slf4j slf4j-log4j12 1.5.6
SLF4J常见问题解答回答了这个问题.请参阅
http://slf4j.org/faq.html#compatibility 和 http://slf4j.org/faq.html#IllegalAccessError