2009-01-12 147 views
80

我一直無法找到任何有關如何使用Log4j的XML樣式配置文件來配置Hibernate日誌記錄的文檔。使用Log4j XML配置文件配置Hibernate日誌記錄?

這是甚至可能或者我有使用屬性樣式配置文件來控制Hibernate的日誌?

如果有人有任何信息或文件的鏈接,它將不勝感激。

編輯:
只是爲了澄清,我正在尋找實際的XML語法來控制Hibernate的例子。

EDIT2:
這是我在我的XML配置文件中。

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

記錄工作正常,但我正在尋找一種方式下臺並控制Hibernate日誌中,從我的應用程序級別的日誌分開的方式,因爲它是目前充斥我的日誌。我已經找到了使用首選項文件來做到這一點的例子,我只是想知道如何在XML文件中做到這一點。

+0

nemo,做過ypu有沒有發現如何做到這一點的XML方式?如果你有問題,也許你可以回答你的問題。 – homaxto 2009-02-06 13:18:30

+0

homaxto,我做到了。一旦我有機會,我會爲你發佈。 – 2009-02-06 15:52:27

+0

不會讓hibernate日誌轉到catalina.out,如果你不想看到充滿休眠日誌的catalina.out,你應該評論這個標記 – 2012-12-27 12:00:28

回答

143

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-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的XML配置文件:

<!-- 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" /> 

NB:大多數記錄儀的使用DEBUG級別,但是org.hibernate.type使用TRACE。在以前的Hibernate版本中,org.hibernate.type也使用了DEBUG,但從Hibernate 3開始,您必須將該級別設置爲TRACE(或ALL)以查看JDBC參數綁定日誌記錄。

和類別被指定爲這樣:

<logger name="org.hibernate"> 
    <level value="ALL" /> 
    <appender-ref ref="FILE"/> 
</logger> 

它必須在根元素之前被放置。

7

迴應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> 

希望這有助於。

5

下面是我用什麼:

<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的消息;) - 級別設置爲「調試」來獲得輸出。

25

Lokianswer指向Hibernate 3文檔,並提供了很好的信息,但我仍然沒有得到我預期的結果。

很多顛簸,揮舞着手臂和一般的死老鼠跑了終於降落我我的奶酪。

因爲休眠3是使用Simple Logging Facade for Java(SLF4J)(每文檔),如果您依靠Log4j的1.2則還需要SLF4J-log4j12-1.5.10.jar,如果你想到完全用log4j配置文件配置Hibernate日誌記錄。希望這有助於下一個人。

3

答案很有用。更改之後,我得到了重複的SQL語句日誌記錄,一個在log4j日誌文件中,另一個在標準控制檯上。我將persistence.xml文件更改爲show_sql爲false以擺脫標準控制檯的日誌記錄。保持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> 
0

您可以配置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> 

所以從休眠每個警告,錯誤或致命的消息將顯示,而已。另外,你的代碼和庫代碼將在信息層面(這樣的信息,警告,錯誤和致命的)

要更改庫的日誌級別,只需添加一個類別,例如,desactive春天信息的日誌:

<category name="org.springframework"> 
    <priority value="WARN" /> 
</category> 

或與其他附加器,打破了加(加默認值是true)

<category name="org.springframework" additivity="false"> 
    <priority value="WARN" /> 
    <appender-ref ref="anotherAppender" /> 
</category> 

如果你不想這樣冬眠記錄每一個查詢,show_sql設置休眠屬性false