Mat*_*all 12 java debugging jboss hibernate log4j
尽管在hibernate.cfg.xml文件中设置了一些属性,我还是无法从Hibernate获得更多的控制台输出(以帮助调试).例如,添加该行<property name="show_sql">true</property>实际上并未在控制台中显示SQL语句.
我也试过玩log4j.properties文件的内容- 比如设置log4j.logger.org.hibernate=debug- 没有运气.我错过了什么?
编辑: hibernate-service.xml文件的内容是
<server>
<mbean code="org.jboss.hibernate.jmx.Hibernate"
name="jboss.har:service=Hibernate_SMS">
<attribute name="DatasourceName">java:/SMS_DS</attribute>
<attribute name="Dialect">org.hibernate.dialect.HSQLDialect</attribute>
<attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute>
<attribute name="CacheProviderClass">org.hibernate.cache.HashtableCacheProvider</attribute>
<attribute name="ShowSqlEnabled">true</attribute>
</mbean>
</server>
Run Code Online (Sandbox Code Playgroud)
不过,我不是百分百确定这是否真的有任何影响.该XML文件位于Eclipse项目中,用于处理我的数据库内容,但似乎不在JBoss部署目录中.
编辑2:这肯定是作为HAR部署的.也就是说,我很确定我需要hibernate.cfg.xml- 我记得在将映射文档作为该文件中的条目省略时会遇到问题.我认为HAR是使用ant生成的 - 在build.xml文件中有一个目标:
<target name="har" depends="prepare" description="Builds the Hibernate HAR file">
<mkdir dir="${class.root}" />
<mkdir dir="${distribution.dir}" />
<jar destfile="${distribution.dir}/${har.name}">
<!-- include the hbm.xml files -->
<fileset dir="${class.root}">
<include name="**/*.hbm.xml"/>
<include name="com/[redacted]/sms/data/dto/*.class"/>
<include name="com/[redacted]/sms/data/dto/base/*.class"/>
</fileset>
<!-- include jboss-service.xml -->
<metainf dir="${hibernate.dir}">
<include name="hibernate-service.xml"/>
</metainf>
</jar>
</target>
Run Code Online (Sandbox Code Playgroud)
但是当我在hibernate-service.xml文件中使用格式错误的xml进行ant构建时,它不会失败.更新即使完全删除文件也不会导致构建失败.这里有什么想法?结束更新
这听起来像让Hibernate输出SQL语句应该(如果一切设置正确)完全处理它 - 这是否意味着log4j.properties中的设置在这里不会产生影响?- 因为在运行ant时实际上确实会改变输出.
编辑3:在遇到我的数据的其他奇怪问题后,我har完全删除了har文件,并使用harant build target 重建了它.突然间一切正常!感谢国际象棋,因为他非常乐于助人.不能说我到底知道到底是做了什么,但我更愿意承认他的努力,而不是写下并接受我自己的答案; 如果你不是"他",我道歉.
Chs*_*y76 14
正确的属性名称是hibernate.show_sql,它绝对有效.
确保你hibernate.cfg.xml是正确的,并且它被拾起; 同样适用于您的log4j.properties文件.我知道那些似乎是愚蠢的建议,但它们占"缺少日志记录输出"问题的98%.
更新:我将更新答案,而不是继续添加评论.你确实需要确保hibernate-service.xmlJBoss能够接你.检查的简单方法是向它添加一个语法错误(比如忽略某个元素上的右括号)并查看JBoss在重启期间是否爆炸:-)它应该打包har并作为构建过程的一部分进行部署,所以如果你意识到它没有被JBoss接收,那就是它的地方.我会摆脱相互冲突的设置hibernate.cfg.xml(例如,你指定的所有内容都不应该复制到mbean属性中hibernate.cfg.xml).就此而言,你甚至需要hibernate.cfg.xml吗?如果部署为HAR,则应自动扫描/拾取您的映射.
我只是使用log4j.properties文件来记录Hibernate语句.对于SQL语句,需要将log4j.logger.org.hibernate.SQL属性设置为debug,对于SQL参数/返回值,需要将log4j.logger.org.hibernate.type属性设置为trace.
这是我使用的log4j.properties文件:
### direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### Root logger
log4j.rootLogger=debug, stdout
### Main Hibernate
log4j.logger.org.hibernate=debug
### log just the SQL
log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters
log4j.logger.org.hibernate.type=trace
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48721 次 |
| 最近记录: |