如何停止休眠过多的日志记录?

时间:2020-04-06 08:14:46

标签: java hibernate

我的应用程序使用hibernate及其打印大量日志。 我尝试将日志记录设置为以下错误级别。但是,它不会将休眠日志记录设置为错误级别。 这里缺少什么吗?

pom.xml:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.2-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.2-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jul</artifactId>
    <version>2.11.2</version>
</dependency>

log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>

<Configuration status="INFO">

    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout
                pattern="[%d{dd MMM yyyy HH:mm:ss}] [%-5p] [%t] [%C{1}:%M:%L] - %m%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Logger name="com.myapp" level="error" additivity="false">
            <AppenderRef ref="CONSOLE" />
        </Logger>
        <Root level="info">
            <appender-ref ref="CONSOLE" />
        </Root>
        <Logger name="org.hibernate" level="error" additivity="false">
            <AppenderRef ref="CONSOLE" />
        </Logger>

    </Loggers>

</Configuration>

使用的冬春季节:

<spring-framework.version>4.0.3.RELEASE</spring-framework.version>
        <hibernate.version>3.6.9.Final</hibernate.version> 

记录其打印结果

19:05:16.733 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG org.hibernate.hql.ast.ErrorCounter - throwQueryException() : no errors
19:05:16.734 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG o.h.hql.ast.QueryTranslatorImpl - HQL: SELECT g FROM myClass g
19:05:16.734 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG o.h.hql.ast.QueryTranslatorImpl - SQL: sql sample
19:05:16.734 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG org.hibernate.hql.ast.ErrorCounter - throwQueryException() : no errors
19:05:16.734 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG o.hibernate.impl.SessionFactoryImpl - Checking named query: Underlyer.findAll
19:05:16.735 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG o.h.hql.ast.QueryTranslatorImpl - parse() - HQL: SELECT u FROM entity.class1 u
19:05:16.737 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG org.hibernate.hql.ast.AST - --- HQL AST ---
 \-[QUERY] Node: 'query'
    \-[SELECT_FROM] Node: 'SELECT_FROM'
       +-[FROM] Node: 'FROM'
       |  \-[RANGE] Node: 'RANGE'
       |     +-[DOT] Node: '.'
       |     |  +-[DOT] Node: '.'
       |     |  |  +-[DOT] Node: '.'
       |     |  |  |  +-[DOT] Node: '.'
       |     |  |  |  |  +-[DOT] Node: '.'
       |     |  |  |  |  |  +-[DOT] Node: '.'

5 个答案:

答案 0 :(得分:5)

线程名称似乎表明您正在Weblogic容器上运行。您确定完全使用了日志记录配置吗? (例如,参见log4j2-not-working-in-weblogic-12-2-1)。

除此之外,我也看不到使用additivity =“ false”然后重复完全相同的附加程序的意义。您为什么不喜欢这样更简单的东西?

<Loggers>
    <Root level="info">
        <appender-ref ref="CONSOLE" />
    </Root>
    <Logger name="com.myapp" level="error"/>
    <Logger name="org.hibernate" level="error"/>
</Loggers>

答案 1 :(得分:0)

如果要通过属性文件选项隐藏SQL,则它是否是Spring应用程序?

spring.jpa.show-sql=false

如果不是Spring,则可以尝试使用此方法(在Sprint应用程序中,例如Hibernate日志配置有效):

<Logger name="org.hibernate.SQL" level="error"/>
<Logger name="org.hibernate.type" level="error"/>

或您想要的任何日志级别。

答案 2 :(得分:0)

尝试设置更合理的日志记录级别。将日志记录级别设置为info意味着仅记录info或更高级别(warnerrorfatal)级别的日志事件,即{{1 }}日志事件将被忽略。

debug

或在log4j配置文件的XML version中:

log4j.logger.org.hibernate=info

另请参阅log4j manual

答案 3 :(得分:0)

您的记录器似乎没有选择正确的文件配置,可能有两个原因。

  1. 由于项目未正确选择 log4j2.xml 文件路径,因此未正确指定文件路径,
  2. 您的 log4j2.xml 文件在根标记中的附加程序引用标记中存在一些错误,请将 appender-ref 更改为 AppenderRef

<Root level="info">
     <appender-ref ref="CONSOLE" />
</Root>

<Root level="info">
      <AppenderRef ref="CONSOLE" />
</Root>

以上两个确定的原因来自您在 log4j2.xml 中使用的日志记录模式,并且共享的实际日志完全不同。从 log4j2.xml

查找所需的图案布局
<PatternLayout pattern="[%d{dd MMM yyyy HH:mm:ss}] [%-5p] [%t] [%C{1}:%M:%L] - %m%n" />

它应该打印日志的样子

[16 Apr 2020 19:05:16.733] [...] [...] [...:...:...] - .......

实际日志具有不同的模式。

19:05:16.733 [...] ... ....... - .....

如下所述。

19:05:16.733 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG org.hibernate.hql.ast.ErrorCounter - throwQueryException() : no errors
19:05:16.734 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG o.h.hql.ast.QueryTranslatorImpl - HQL: SELECT g FROM myClass g
19:05:16.734 [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG o.h.hql.ast.QueryTranslatorImpl - SQL: sql sample

答案 4 :(得分:0)

设置休眠配置属性:

hibernate.show_sql=false