【问题标题】:Spring 4, JPA, Turn off console debug messagesSpring 4,JPA,关闭控制台调试消息
【发布时间】:2014-06-27 15:30:05
【问题描述】:

我有一个基本的 Spring 4 JPA 应用程序。我使用所有 Java 配置(根本没有 XML)。我想关闭控制台调试消息。我已经看到了很多关于此的问题并尝试了解决方案,但我仍然看到了所有消息。

控制台消息如下所示:

14:58:29.301 [main] DEBUG o.h.loader.entity.plan.EntityLoader....
14:58:29.328 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate....
....
14:58:29.905 [main] DEBUG o.h.h.i.ast.QueryTranslatorImpl - --- HQL AST ---
    \-[QUERY] Node: 'query'
      \-[SELECT_FROM] Node: 'SELECT_FROM'
      +-[FROM] Node: 'from'
       |  \-[RANGE] Node: 'RANGE'
       |     +-[DOT] Node: '.'
       |     |  +-[IDENT] Node: 'hello'
       |     |  \-[IDENT] Node: 'Customer'
       |     \-[ALIAS] Node: 'generatedAlias0'
    \-[SELECT] Node: 'select'
     \-[IDENT] Node: 'generatedAlias0'
....
Hundreds of lines more....

我尝试在 HibernateJpaVendorAdapter 和 LocalContainerEntityManagerFactoryBean 中都设置 show_sql,如下所示:

@Bean
  public EntityManagerFactory entityManagerFactory() throws SQLException {
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setGenerateDdl(true);
    vendorAdapter.setShowSql(false);

    LocalContainerEntityManagerFactoryBean factory = new
        LocalContainerEntityManagerFactoryBean();
    factory.setJpaVendorAdapter(vendorAdapter);
    factory.setPackagesToScan("hello");
    factory.setDataSource(dataSource());

    Properties jpaProperties = new Properties();
    jpaProperties.put( "hibernate.dialect", "org.hibernate.dialect.MySQLDialect" );
    jpaProperties.put( "hibernate.show_sql", false );
    jpaProperties.put( "show_sql", false );
    jpaProperties.put( "hibernate.generate_statistics", false );
    factory.setJpaProperties(jpaProperties);
    factory.afterPropertiesSet();
    return factory.getObject();
  }

感谢您对此提出任何想法!

-- 编辑 -- 更多信息

我所做的是使用 Spring Tools Suite 创建一个 Spring Starter 项目,然后选择 JPA。然后我将 MySQL 添加到我的 pom.xml。

作为测试,我有一个基本的 Customer 和 CustomerRepository 类以及上面提到的 JPA 配置。

我的应用程序类:

@Configuration
@EnableAutoConfiguration
public class Application {

  public static void main(String[] args) {

    AbstractApplicationContext context = new
      AnnotationConfigApplicationContext(JPAConfiguration.class);

      CustomerRepository repository = context.getBean(CustomerRepository.class);

      //use the repository.....

      ((AbstractApplicationContext) context).close();
      context.close();
  }
}

就是这样——使用 Spring Tools Suite 创建的一个非常基本的 JPA Spring Starter 项目。如果我能弄清楚如何处理登录,我就可以将这些信息转化为我的实际项目。

-- 编辑 -- 更多信息 -- 并且已修复!

好吧,这很有趣... 我改变了我的应用程序类,问题就消失了。 因此,使用此应用程序(与上面发布的应用程序相比)并且日志记录问题现在可以了 - 任何可以评论为什么会这样工作的人?

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

  public static void main(String[] args) {

    ConfigurableApplicationContext context =
      SpringApplication.run(Application.class);

    CustomerRepository repository = context.getBean(CustomerRepository.class);

    //use the repository.....

    context.close();
  }
}

请注意,Alan Hay 下面提供的解决方案也很有效,无论我如何执行 Application 类!

注意,无论哪种方式,您仍然可以按照我的配置(参见上面的 Bean)设置 setJpaProperties 来控制是否要查看 Hibernate 的 SQL 等。

【问题讨论】:

  • 检查this answer
  • 您需要更改 Hibernate 日志记录级别

标签: spring jpa configuration


【解决方案1】:

我最近遇到了同样的问题。看来 Spring 4 使用 logback 库进行日志记录,而我的应用程序只有一个 log4j 配置文件。为 logback 添加额外的日志记录配置文件解决了这个问题。

如果你有一个现有的 log4j 配置文件,这里有一个工具可以将其转换为 logback 格式:

http://logback.qos.ch/translator/

如果不尝试将名为 logback.xml 的文件添加到类路径的根目录:

<?xml version="1.0" encoding="UTF-8"?>                                                              
<configuration>
  <appender name="A1" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{dd MMM yyyy HH:mm:ss} %-4r [%t] %-5p %c %x - %m%n</pattern>
    </encoder>
  </appender>
  <logger name="org.springframework" level="ERROR"/>
  <logger name="org.hibernate" level="ERROR"/>
  <root level="DEBUG">
    <appender-ref ref="A1"/>
  </root>
</configuration>

【讨论】:

  • 这很棒!有没有办法在没有 XML 的情况下做到这一点(就像我在上面的示例中配置 Hibernate 的方式一样)?另请参阅我在上面发布的关于我让它工作的另一种方式的编辑信息。
  • 快速说明:我发现这种模式最适合我的 JPA 应用程序:%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
相关资源
最近更新 更多