使用Log4j XMLconfiguration文件configurationHibernate日志logging?
我一直没有find任何有关如何使用Log4j的XML样式configuration文件来configurationHibernate日志的文档。
这甚至可能或者我有使用属性风格的configuration文件来控制Hibernate的日志?
如果任何人有任何信息或文件的链接,将不胜感激。
编辑:
只是为了澄清,我正在寻找一个实际的XML语法来控制Hibernate的例子。
EDIT2:
这是我在我的XMLconfiguration文件中。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Threshold" value="info"/> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/> </layout> </appender> <appender name="rolling-file" class="org.apache.log4j.RollingFileAppender"> <param name="file" value="Program-Name.log"/> <param name="MaxFileSize" value="1000KB"/> <!-- Keep one backup file --> <param name="MaxBackupIndex" value="4"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/> </layout> </appender> <root> <priority value ="debug" /> <appender-ref ref="console" /> <appender-ref ref="rolling-file" /> </root> </log4j:configuration>
日志logging工作正常,但我正在寻找一种方式来降低和控制hibernate日志的方式,从我的应用程序级别日志logging,因为它目前是洪泛我的日志。 我已经find使用首选项文件的例子来做到这一点,我只是想知道如何在XML文件中做到这一点。
以下是logging器类别列表:
Category Function org.hibernate.SQL Log all SQL DML statements as they are executed org.hibernate.type Log all JDBC parameters org.hibernate.tool.hbm2ddl Log all SQL DDL statements as they are executed org.hibernate.pretty Log the state of all entities (max 20 entities) associated with the session at flush time org.hibernate.cache Log all second-level cache activity org.hibernate.transaction Log transaction related activity org.hibernate.jdbc Log all JDBC resource acquisition org.hibernate.hql.ast.AST Log HQL and SQL ASTs during query parsing org.hibernate.secure Log all JAAS authorization requests org.hibernate Log everything (a lot of information, but very useful for troubleshooting)
格式化为粘贴到log4j XMLconfiguration文件中:
<!-- Log all SQL DML statements as they are executed --> <Logger name="org.hibernate.SQL" level="debug" /> <!-- Log all JDBC parameters --> <Logger name="org.hibernate.type" level="debug" /> <!-- Log all SQL DDL statements as they are executed --> <Logger name="org.hibernate.tool.hbm2ddl" level="debug" /> <!-- Log the state of all entities (max 20 entities) associated with the session at flush time --> <Logger name="org.hibernate.pretty" level="debug" /> <!-- Log all second-level cache activity --> <Logger name="org.hibernate.cache" level="debug" /> <!-- Log transaction related activity --> <Logger name="org.hibernate.transaction" level="debug" /> <!-- Log all JDBC resource acquisition --> <Logger name="org.hibernate.jdbc" level="debug" /> <!-- Log HQL and SQL ASTs during query parsing --> <Logger name="org.hibernate.hql.ast.AST" level="debug" /> <!-- Log all JAAS authorization requests --> <Logger name="org.hibernate.secure" level="debug" /> <!-- Log everything (a lot of information, but very useful for troubleshooting) --> <Logger name="org.hibernate" level="debug" />
注意:大多数logging器使用DEBUG级别,但是org.hibernate.type使用TRACE。 在以前的Hibernate版本中,org.hibernate.type也使用了DEBUG,但是从Hibernate 3开始,你必须将级别设置为TRACE(或ALL)才能看到JDBC参数绑定日志logging。
而一个类别被指定为:
<logger name="org.hibernate"> <level value="ALL" /> <appender-ref ref="FILE"/> </logger>
它必须放在根元素之前。
Loki的答案指向了Hibernate 3文档,并提供了很好的信息,但是我仍然没有得到我期望的结果。
许多鞭打,挥舞着arm和一般的老鼠死亡终于降落我的奶酪。
因为Hibernate 3使用Java的简单日志门面 (SLF4J)(每个文档), 如果你依赖于Log4j 1.2,你还需要slf4j-log4j12-1.5.10.jar,如果你想完全configurationHibernate日志一个log4jconfiguration文件。 希望这有助于下一个人。
回应homaxto的评论,这是我现在所拥有的。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Threshold" value="debug"/> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/> </layout> </appender> <appender name="rolling-file" class="org.apache.log4j.RollingFileAppender"> <param name="file" value="Program-Name.log"/> <param name="MaxFileSize" value="500KB"/> <param name="MaxBackupIndex" value="4"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/> </layout> </appender> <logger name="org.hibernate"> <level value="info" /> </logger> <root> <priority value ="debug" /> <appender-ref ref="console" /> <appender-ref ref="rolling-file" /> </root> </log4j:configuration>
关键部分是
<logger name="org.hibernate"> <level value="info" /> </logger>
希望这可以帮助。
以下是我使用的:
<logger name="org.hibernate"> <level value="warn"/> </logger> <logger name="org.hibernate.SQL"> <level value="warn"/> </logger> <logger name="org.hibernate.type"> <level value="warn"/> </logger> <root> <priority value="info"/> <appender-ref ref="C1"/> </root>
显然,我不喜欢看到Hibernate的消息;) – 设置级别为“debugging”得到输出。
答案是有用的。 更改之后,我得到了重复的SQL语句日志logging,一个在log4j日志文件中,一个在标准控制台上。 我更改了persistence.xml文件,将show_sql设置为false以摆脱标准控制台的日志logging。 保持format_sql为true也会影响log4j日志文件,所以我保持这种状态。
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="myUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/> <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file:d:\temp\database\cap1000;shutdown=true"></property> <property name="dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.show_sql" value="false"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit> </persistence>
你可以像这样用类别标签来configuration你的log4j
文件(例如用一个控制台appender):
<appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss} %p %c - %m%n" /> </layout> </appender> <category name="org.hibernate"> <priority value="WARN" /> </category> <root> <priority value="INFO" /> <appender-ref ref="console" /> </root>
所以每一个从hibernate状态发出的警告,错误或致命的信息都将被显示出来,仅此而已。 此外,您的代码和库代码将在信息级别(所以信息,警告,错误和致命)
要更改库的日志级别,只需将一个类别添加到desactive spring info log:
<category name="org.springframework"> <priority value="WARN" /> </category>
或者与另一个appender打破可加性(additivity默认值为true)
<category name="org.springframework" additivity="false"> <priority value="WARN" /> <appender-ref ref="anotherAppender" /> </category>
如果你不想让这个hibernatelogging每个查询,那么把hibernate属性show_sql
设置为false
。