Hibernate show sql等于Stdout

时间:2014-09-24 11:33:19

标签: hibernate jboss7.x

我在hibernate中声明了<property name="show_sql">true</property>。我在这个link中读到了stdout问题。 Stdout将消耗更多内存。那么 show_sql 功能如何运作?因为我在服务器日志stdout中看到了sql查询。

13:06:53,323 INFO  [stdout] (http-/172.29.250.43:8080-7) Hibernate: select sampledata0_.idsample as idsample4_10_1_, sampledata0_.id as id1_9_1_, sampledata0_.id as id1_9_0_, sampledata0_.idsample as idsample4_9_0_, sampledata0_.sname as sname2_9_0_, sampledata0_.svalue as svalue3_9_0_ from sample_meta_data sampledata0_ where sampledata0_.idsample=?
13:06:53,324 INFO  [stdout] (http-/172.29.250.43:8080-7) Hibernate: select sampledata0_.idsample as idsample4_10_1_, sampledata0_.id as id1_9_1_, sampledata0_.id as id1_9_0_, sampledata0_.idsample as idsample4_9_0_, sampledata0_.sname as sname2_9_0_, sampledata0_.svalue as svalue3_9_0_ from sample_meta_data sampledata0_ where sampledata0_.idsample=?

内部休眠假设使用System.out.println。它会消耗更多内存吗? format_sqlshow_sql如何在内部工作?

2 个答案:

答案 0 :(得分:3)

trueshow_sql设置format_sql不会消耗更多内存,但会将SQL语句写入控制台,因此非常耗时。

来自documentation

  

将所有SQL语句写入控制台。这是设置的替代方案   要调试的日志类org.hibernate.SQL。

     

e.g。是的|假

因此,当您将属性show_sql设置为true时,hibernate会使用以下方法将SQL语句打印到控制台:

Hibernate使用以下方法显示内部使用的SQLStatementLogger class的SQL语句。

/**
 * Log a SQL statement string.
 *
 * @param statement The SQL statement.
 * @param style The requested formatting style.
 */
public void logStatement(String statement, FormatStyle style) {
    if ( log.isDebugEnabled() || logToStdout ) {
        style = determineActualStyle( style );
        statement = style.getFormatter().format( statement );
    }
    log.debug( statement );
    if ( logToStdout ) {
        System.out.println( "Hibernate: " + statement );
    }
}

在上述方法中,如果format_sql设置为true,则将格式化SQL语句,否则将不应用格式化样式。

现在,如果LOG级别设置为DEBUG,则SQL语句将写入日志文件。如果将show_sql设置为true,则会将消息输出到控制台。正如您在问题中提供的链接中所提到的,与将数据打印到日志文件相比,使用System.out.println会更耗时。

通常,当应用程序处于生产状态时,日志级别将不会设置为DEBUG,因为将消息写入日志文件需要一些时间。

答案 1 :(得分:0)

当show_sql是ture时,语句将被打印到system.out;如果你想将语句打印到log4j文件集中,你应该将log4j.logger.org.hibernate.SQL的级别设置为DEBUG