我正在试图弄清楚为什么我们的Hibernate代码没有记录任何东西到log4j。我整理了一个简单的项目,它调用一个Hibernate服务方法,将log4j消息记录为第一行。
项目和Hibernate服务都有以下log4j特定代码:
private static Logger NTEVENT_LOG = Logger.getLogger("NTEVENT");
NTEVENT_LOG.debug("==== LOG4J logging");
当我运行项目(Eclipse-> run)时,我得到以下红色信息:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
但是当我看到来自应用程序本身的日志记录后,立即对log4j的某些部分进行了正确的初始化。但是,Hibernate服务没有记录任何内容。
[main] DEBUG NTEVENT - ==== LOG4J logging
这是我的log4j.xml
<appender name="NTEVENT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="NTEVENT" />
</root>
我必须遗漏Hibernate期待的东西,但我不知道是什么。
答案 0 :(得分:0)
要使用xml文件配置log4j,您需要在main中使用DOMConfigurator.configure()方法。
此方法也需要导入 org.apache.log4j.xml.DOMConfigurator 包。
public static void main(String[] args) {
DOMConfigurator.configure("log4j.xml");
..//your code
..
}
希望这会有所帮助.. !!
答案 1 :(得分:0)
问题是因为ThrashBean暗示,未启用org.hibernate的日志记录。如果你想查看Hibernate调试输出,例如查询,你需要:
答案 2 :(得分:0)
我终于得到了我案件中发生的事情。它也可能帮助Netbeans用户遇到同样问题,因为我已经失去了很多头发已经有好几个月了。我的应用程序刚刚停止登录到控制台,所以我无法调试,因为没有显示错误。
答案“在不同位置的库中有两个log4j jar文件。”是真的。最初我原本希望找到名为log4xxx.jar的2个文件,当然有不同的版本号,但根本没有这样的文件。您可以看到Netbeans预装了Hibernate库和许多其他库。因此,当在Netbeans中开发hibernate应用程序时,您不需要手动添加自己的Hibernate Jars,除非您需要特定版本等,您只需通过右键单击项目将Hibernate库添加到您的应用程序中 - 属性 - 库 - 添加库按钮。这将在运行时在后台/类路径中添加许多hibernate Jars,也在dist / lib文件夹中添加,而不是在应用程序的lib中。在我的情况下,我添加了Hibernate库并将生成的hibernate jar从dist / lib复制到lib。这是错误的,因为我从以前的应用程序中复制了库,以包含在我的新应用程序中使用。
所以带回家点,如果在Netbeans中,转到你的lib文件夹,如果你看到罐子就好 hibernate-commons-annotations-x.x.x.Final.jar,hibernate-core-x.x.x.Final.jar,hibernate-entitymanager-x.x.x.Final.jar,hibernate-jpa-2.0-api-x.x.x.Final.jar,hibernate-tools-x.x.x.CR1.jar 删除它们并检查错误是否已解决。