Отключение Flyway — проблема log4j

#java #logging #log4j #flyway

#java #ведение журнала #log4j #flyway

Вопрос:

Я написал оболочку вокруг Flyway, которую я называю Nomad. Я очень доволен Flyway, за исключением непрерывного ведения журнала, который он выполняет за пределами Maven. Я создал проблему здесь. Каждый пользователь Nomad должен создать свою собственную конфигурацию log4j, чтобы отключить Flyway. Это проблематично, если не сделано, например, во время тестирования спецификации. Однако получение правильной конфигурации является сложной задачей, и, более того, необходимость делать это нарушает абстракцию моей библиотеки.

Мой вопрос заключается в следующем: как я могу навсегда отключить flyway, чтобы любой пользователь Nomad не был обременен этой задачей? Я обнаружил, что это log4j.xml иногда работает:

 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %t %-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="org.springframework" additivity="false">
        <level value="error"/>
        <appender-ref ref="console"/>
    </logger>

    <root>
        <priority value="error"/>
        <appender-ref ref="console"/>
    </root>
</log4j:configuration>
  

Это заглушает Flyway до такой степени, что он становится полезным, а не чрезмерно болтливым. Неправильное направление все еще нарушается, но не часто.

Ответ №1:

То, как вы это сделали в log4j.xml , кажется хорошим. Я не вижу ничего плохого.

Поскольку проект использует Maven, я рекомендую вам вместо этого добавить файл свойств log4j.properties , который вы разместите в src/main/resources

Содержимое может быть:

 log4j.rootCategory=DEBUG, stderr
log4j.appender.stderr=org.apache.log4j.ConsoleAppender
log4j.appender.stderr.target=System.err
log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern=[%d] %-5p %c %x: %m%n

# Silence springframework messages.
org.springframework=ERROR
  

Возможно, у вас это сработает лучше. Также становится проще управлять.

Комментарии:

1. Я не совсем понимаю цель вашей рекомендации. Nomad использует SBT — Apache Ivy под ним — и хотя Flyway действительно использует Maven в качестве своего инструмента сборки, к тому времени, когда я приступаю к его использованию, Flyway — это просто jar. Кроме того, спасибо за более краткий эквивалент свойств.

Ответ №2:

Единственной зависимостью от фреймворка Flyway, не связанной с протоколированием, является Spring. Как указал Мохаммед Мансур, вы можете подавить все, кроме сообщений об ОШИБКАХ, с помощью простого параметра конфигурации Log4J.

Для Spring (как указано Мохамедом Мансуром):

 org.springframework=ERROR
  

Для Flyway:

 com.googlecode.flyway=ERROR
  

Комментарии:

1. Затем это становится необходимым шагом настройки для каждого пользователя Nomad; Я бы предпочел, чтобы это было сделано один раз в Nomad.