使用日志和休眠将SQL记录到文件



运行dev配置文件时,我正试图将SQL直接记录到一个文件中。这是我的logback.xml

<configuration>
<property name="SQL_LOG_FILE" value="${LOG_PATH:-${LOG_TEMP:-${TMPDIR:-/tmp}}}/${HIBERNATE_LOG_FILE:-hibernate.log}"/>
<springProfile name="dev">
<appender name="SQLDEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SQL_LOG_FILE}</file>
<encoder>
<charset>utf-8</charset>
<Pattern>%-5level %logger{0} - %msg%n</Pattern>
</encoder>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>utf-8</charset>
<Pattern>[%highlight(%p)] [%t] %c - %m%n</Pattern>
</encoder>
</appender>
<logger name="org.hibernate.SQL" additivity="false" level="DEBUG">
<appender-ref ref="SQLDEBUG"/>
</logger>
<logger name="org.hibernate.type.descriptor.sql" additivity="false" level="TRACE">
<appender-ref ref="SQLDEBUG"/>
</logger>
</springProfile>
<root level="${logback.loglevel}">
<springProfile name="dev">
<appender-ref ref="CONSOLE"/>
</springProfile>
</root>

为了简单起见,我删除了prod配置文件设置。用于hibernate的loggerdev配置文件中,因为我不希望在prod中启用它。我已经尝试了许多org.hibernate设置的组合。此版本生成SQL日志,但仅将其转储到控制台,而不是日志文件。一些常规启动信息会添加到日志文件中,但不会添加SQL。

如果我将org.hibernate.type.descriptor.sql更改为org.hibernate.type,那么会有很多堆栈跟踪日志直接添加到文件中,但没有SQL。

一些帖子建议使用org.hibernate.SQL level=TRACE,但这似乎并没有改变任何事情。

我还尝试将记录器放在开发配置文件之外,但这也没有改变结果。

有很多关于启用logback&hibernate用于简单的控制台输出,但不用于将SQL发送到其自己的日志文件。

我还尝试在IntelliJ中启用hibernate.SQL=DEBUG,但这会在控制台上生成大量SQL,我不需要这样做。

我一直在尝试

我怀疑是否使用了spring配置文件。要实现这一点,请将logback.xml文件重命名为logback-spring.xml,允许使用springProfile标记。在这个标签中,可以提供一个名称,该名称可以通过属性、环境变量或VM选项进行设置。以下是如何将springProfile名称设置为dev,它已用于表示开发环境。

要在application.properties中设置或设置为环境变量:

spring.profiles.active=dev

或者作为VM选项:

-Dspring.profiles.active=dev

此外,将根级别标签修改为位于spring profile标签内:

<springProfile name="dev">
<root level="${logback.loglevel}">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>

最新更新