如何用log4j2禁用hibernate 4输出?

时间:2014-08-26 04:27:34

标签: hibernate log4j log4j2

我正在使用以下log4j2.xml配置。我把它保存在资源文件夹的根目录中。

我无法摆脱INFO stdout hibernate输出。 e.g。

06:17:01,835 INFO  [stdout] (ServerService Thread Pool -- 52)     insert into hibernate_sequence values ( 1 )

我的配置有什么问题和/或缺少什么?

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="com.mycode" level="trace" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="org.hibernate" level="warn" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>
        <Root level="warn">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

我将这些库附加到我的项目中。

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.0.2</version>
        </dependency>

我正在使用这个API版本的JPA / Hibernate 4。

        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <scope>provided</scope>
        </dependency>

4 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,关闭日志级别对我有用:

 <logger name="org.hibernate" level="OFF" additivity="false">
        ...
</logger>

答案 1 :(得分:2)

根据您的帖子,INFO消息包含Hibernate生成的查询。这是在hibernate.cfg.xml配置文件中使用属性show_sql`配置的。您可以使用配置文件中的以下行禁用它。

<property name="show_sql">false</property>

答案 2 :(得分:0)

<强>执行:

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.OFF);

在hibernate初始化之前为我工作。

注意:上面的行将关闭每个注销(Level.OFF)。如果你想要不那么严格,你可以使用

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);

足够沉默。 (或者检查java.util.logging.Level类以获取更多级别)。

还有财产

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments

直接控制日志记录到STDOUT绕过任何日志记录框架(您可以通过缺少的消息输出格式识别)。如果您使用log4j之类的日志记录框架,则应始终将该属性设置为 false

但是如果要禁用所有控制台信息,则必须将记录器级别设置为类{org.hibernate NONE的{​​{1}} ..

<强> FATAL

启用将所有生成的SQL语句记录到控制台

show_sql

<强> <property name="show_sql">false</property>

格式化生成的SQL语句以使其更具可读性,但占用更多屏幕空间。

format_sql

<强> <property name="format_sql">false</property>

Hibernate会在所有生成的SQL语句中放置注释,以暗示生成的SQL尝试做什么

use_sql_comments

<强>合并

<property name="use_sql_comments">false</property>

答案 3 :(得分:0)

java.util.logging.Logger.getLogger("org.hibernate") .setLevel(java.util.logging.Level.OFF) 课程中,只写:

AnnotationConfiguration

在创建log4j2.xml对象之前。

使用log4j2 (log4j-api-2.2.jar and log4j-core-2.2.jar)private final SessionFactory sessionFactory; { java.util.logging.Logger.getLogger("org.hibernate") .setLevel(java.util.logging.Level.OFF); try { sessionFactory = new AnnotationConfiguration() .configure("hibernate.cfg.xml").buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } }

时有效

这是我的功能代码:

{{1}}