简体   繁体   English

如何停止 hibernate 过度登录?

[英]How to stop hibernate excessive logging?

My application uses hibernate and its printing lot of logging.我的应用程序使用 hibernate 及其打印日志记录。 I tried to set logging to error level as below.我尝试将日志记录设置为错误级别,如下所示。 However, it does not set hibernate logging to error level.但是,它不会将 hibernate 日志记录设置为错误级别。 Is anything missing here?这里有什么遗漏吗?

pom.xml: 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 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>

Hibernate and spring version used: Hibernate 和 spring 使用的版本:

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

Log its printing记录其打印

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: '.'

The thread names seem to suggest that you're running on a weblogic container.线程名称似乎表明您正在 weblogic 容器上运行。 Are you sure that the logging config is being used at all?您确定正在使用日志记录配置吗? (eg see log4j2-not-working-in-weblogic-12-2-1 ). (例如,请参阅log4j2-not-working-in-weblogic-12-2-1 )。

Apart from that, I also don't see the point in using additivity="false" and then repeating exactly the same appenders.除此之外,我也不认为使用 additivity="false" 然后重复完全相同的附加程序有什么意义。 Why don't you prefer something simpler like this?你为什么不喜欢这样简单的东西呢?

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

Is it a Spring application if so you could hide SQL from printing via properties file option:它是一个 Spring 应用程序吗,如果是这样,您可以通过属性文件选项隐藏 SQL 不打印:

spring.jpa.show-sql=false

If it is not a Spring you could try this (in Sprint apllication such Hibernate log config works):如果它不是 Spring,你可以试试这个(在 Sprint 应用中,Hibernate 日志配置有效):

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

OR whatever Log Level do you want.或者你想要的任何日志级别。

My application uses hibernate and its printing lot of logging.我的应用程序使用 hibernate 及其打印大量的日志记录。 I tried to set logging to error level as below.我尝试将日志记录设置为错误级别,如下所示。 However, it does not set hibernate logging to error level.但是,它不会将 hibernate 日志记录设置为错误级别。 Is anything missing here?这里有什么遗漏吗?

pom.xml: 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 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>

Hibernate and spring version used:使用的 Hibernate 和 spring 版本:

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

Log its printing记录其打印

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: '.'

What seems that your logger is not picking the right file configuration, there might be two reasons.您的记录器似乎没有选择正确的文件配置,可能有两个原因。

  1. You did not specify your log4j2.xml file path correctly, as your project is not picking it right, which is detected from your logs.您没有正确指定log4j2.xml文件路径,因为您的项目没有正确选择它,这是从您的日志中检测到的。
  2. Your log4j2.xml file has some error in appender reference tag inside root tag, change appender-ref to AppenderRef您的log4j2.xml文件在根标记内的 appender 引用标记中有一些错误,将appender-ref更改为AppenderRef

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

to

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

The above two identified reasons are from the logging pattern you are using in your log4j2.xml and actual logs shared are totally different.以上两个确定的原因来自您在log4j2.xml中使用的日志记录模式,实际共享的日志完全不同。 Look your desired pattern layout from log4j2.xmllog4j2.xml查看您想要的模式布局

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

It should print logs looks like它应该打印日志看起来像

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

where actual logs have different patterns.实际日志有不同的模式。

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

as mentioned under.如下所述。

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

Set the hibernate Configuration properties:设置 hibernate 配置属性:

hibernate.show_sql=false

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM