使用logback和hibernate将sql记录到文件

ruarlubt  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(387)

在运行 dev 轮廓。这是我的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 简单的配置文件设置。这个 logger 因为冬眠是在 dev 因为我不想在中启用它 prod . 我试过很多这样的组合 org.hibernate 设置。此版本生成sql日志,但仅将其转储到控制台,而不是日志文件。一些常规启动信息被添加到日志文件中,但没有sql。
如果我改变 org.hibernate.type.descriptor.sqlorg.hibernate.type 有许多堆栈跟踪日志直接添加到文件中,但没有sql。
一些帖子建议使用 org.hibernate.SQL level=TRACE 但这似乎没有改变什么。
我还尝试将记录器放在dev概要文件之外,但这也没有改变结果。
对于简单的控制台输出启用logback和hibernate有很多信息,但是对于将sql发送到自己的日志文件却没有。
我也试过启用 hibernate.SQL=DEBUG 在intellij中,但这会在控制台上生成大量sql,我不需要这样做。
我一直在努力

e4yzc0pl

e4yzc0pl1#

我怀疑你的Spring轮廓被使用了。要使其工作,请将logback.xml文件重命名为logback-spring.xml,允许使用springprofile标记。在这个标签中,可以提供一个可以通过属性、环境变量或vm选项设置的名称。下面是如何将springprofile名称设置为dev,dev用于表示开发环境。
要在application.properties中设置或作为环境变量设置,请执行以下操作:

spring.profiles.active=dev

或者作为虚拟机选项:

-Dspring.profiles.active=dev

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

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

相关问题