我没能找到任何文件如何配置休眠的记录使用XML格的配置文件Log4j.

这甚至可能还是要我用一个性风格的配置文件控制休眠的记录?

如果任何人有任何信息或链接文件,它将赞赏。

编辑:
只是为了澄清,我在寻找一个例子实际XML语法控制休眠状态。

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>

记录工作正常,但是我在寻找一种方式下和控制的休眠记录的方式独立的自我应用程序级别的记录,因为目前,它是洪水我的日志。我们发现实例的使用偏好的文件要做到这一点,我只是想知道我怎么可以这样做在XML文件。

有帮助吗?

解决方案

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,但作为休眠3的必须设置在为了看到JDBC参数绑定记录到跟踪(或全部)的水平。

和类别被指定为这样的:

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

它必须放置在根元素之前

其他提示

洛基's 答案 点的休眠3文件和提供了良好的信息,但是我仍然没有得到结果,我的预期。

很颠簸,挥舞着武器和大死老鼠跑终于登陆我的奶酪。

因为休眠3的使用 简单的记录正面Java (SLF4J)(每docs), 如果 你是依靠Log4j1.2你会 需要 slf4j-log4j12-1.5.10.jar 如果你想要 完全 配休眠记录与log4j配置文件。希望这有助于下一个家伙。

在回应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的消息。) - 级别设置为“调试”来获得输出

答案很有用。更改后,我收到了重复的 SQL 语句日志记录,一份记录在 log4j 日志文件中,一份记录在标准控制台上。我将 persistence.xml 文件更改为 show_sql 为 false,以摆脱标准控制台的日志记录。保持 format_sql true 也会影响 log4j 日志文件,所以我保持 true。

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

您可以配置您的 log4j 带有这样的类别标签的文件(例如带有控制台附加程序):

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

因此,来自休眠状态的每个警告、错误或致命消息都会被显示,仅此而已。此外,您的代码和库代码将处于信息级别(因此信息、警告、错误和致命)

要更改库的日志级别,只需添加一个类别,例如,添加到非活动的 spring info 日志:

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

或者使用另一个附加程序,打破可加性(可加性默认值为 true)

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

如果您不希望 hibernate 记录每个查询,请设置 hibernate 属性 show_sqlfalse.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top