logback additivity是false仍然是在Tomcat控制台上生成的hibernate sql日志

时间:2012-12-30 07:17:24

标签: sql hibernate logback

如何生成2个日志文件;一个将记录show-sql = true属性生成的Hibernate sql消息。另一个将记录其余的Hibernate日志。

我已经配置了logback.xml,如下所示:

<logger name="org.hibernate" level="debug" additivity="false">
    <appender-ref ref="hibernate" />
</logger>

<logger name="org.hibernate.SQL" additivity="false">
    <appender-ref ref="hibernate-sql" />
</logger>

按预期生成2个日志文件。但是,它在Tomcat控制台,hibernate appender和hibernate-sql appender中复制了hibernate-sql日志消息。

我怎么能限制logback只在hibernate-sql appender中生成Hibernate sql日志?

1 个答案:

答案 0 :(得分:3)

Hibernate以两种截然不同且完全独立的方式编写生成的SQL。当您将属性hibernate.show_sql设置为true时,它会告诉Hibernate将生成的SQL写入stdout。任何方式都不涉及日志记录框架。这就是为什么你几乎不应该使用它。只需从配置中删除该属性,Tomcat控制台中的SQL就会消失。

Hibernate编写SQL的第二种方式,以及您应该使用的方式是,它将它发送到org.hibernate.SQL日志记录类别下的日志记录框架。它与hibernate.show_sql没有任何联系。

作为额外的消息,如果您不知道,Hibernate还会使用org.hibernate.type类别记录绑定到预准备语句的参数的所有值。这是hibernate.show_sql无法实现的,因此使用Hibernate的日志记录而不是show_sql更灵活,信息更丰富。