【问题标题】:Log SQL to file with logback & hibernate使用 logback & hibernate 将 SQL 记录到文件中
【发布时间】:2020-07-10 16:32:50
【问题描述】:

我试图在运行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 配置文件设置。 用于休眠的loggerdev 配置文件中,因为我不想在prod 中启用它。 我已经尝试了这些org.hibernate 设置的许多组合。此版本生成 SQL 日志,但仅将它们转储到控制台,而不是日志文件。日志文件中添加了一些常规启动信息,但没有添加 SQL。

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

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

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

有很多信息可用于为简单的控制台输出启用 logback 和休眠,但不用于将 SQL 发送到其自己的日志文件。

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

我一直在尝试

【问题讨论】:

    标签: java sql hibernate logback


    【解决方案1】:

    我怀疑您正在使用弹簧配置文件。为了让它工作,将 logback.xml 文件重命名为 logback-spring.xml,允许使用 springProfile 标记。在这个标签中,可以提供一个可以通过属性、环境变量或 VM 选项设置的名称。下面是如何将 springProfile 名称设置为 dev ,该名称已用于表示开发环境。

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

    spring.profiles.active=dev
    

    或作为 VM 选项:

    -Dspring.profiles.active=dev
    

    另外,将根级标签修改为 spring 配置文件标签内:

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

    【讨论】:

      猜你喜欢
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 2014-04-30
      • 2013-11-10
      • 2020-12-19
      • 1970-01-01
      相关资源
      最近更新 更多