Записать SQL в файл с выходом и спящим режимом - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь записать SQL непосредственно в файл при запуске профиля dev. Это мой логбэк. 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.sql на org.hibernate.type, будет много журналов трассировки стека, которые добавляются непосредственно в файл, но нет SQL.

В некоторых сообщениях рекомендуется использовать org.hibernate.SQL level=TRACE, но это, похоже, ничего не меняет.

Я также попытался поместить регистратор вне профиля разработчика, но это также не изменило результатов.

Существует много информации о включении логбэка и спящего режима для простого вывода на консоль, но не для отправки SQL в собственный файл журнала.

Я также пробовал включить hibernate.SQL=DEBUG в IntelliJ, но это дает SQL на консоли, мне не нужно этого делать.

Я пробовал

1 Ответ

0 голосов
/ 10 июля 2020

Я сомневаюсь, что вы используете пружинный профиль. Чтобы это работало, переименуйте файл logback. xml в logback-spring. xml, разрешив использование тега springProfile. В этом теге можно указать имя, которое можно задать с помощью свойств, переменных среды или параметров виртуальной машины. Ниже показано, как вы можете установить для имени springProfile значение dev, которое использовалось для представления среды разработки.

Для установки в application.properties или в качестве переменной среды:

spring.profiles.active=dev

Или в качестве опции VM:

-Dspring.profiles.active=dev

Также измените тег root -level, чтобы он находился внутри тега профиля пружины:

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

...