Исходные данные:
- GWT проект
- логгирование через slf4j посредством logback
- сборка проекта через maven
Цели:
- надо чтобы logback.xml попадал в WAR-ник
- при запуске в Dev Mode надо чтобы использовался другой logback.xml, чем тот, который попадает в WAR-ник
- при запуске Unit тестов надо чтобы использовалась 3-я конфигурация logback
Почему logback.xml не попадает в WAR-ник - это отдельная история. Причин я так и не смог выяснить. Причем это вроде касается локальной сборки. При авто-сборке вроде как все в порядке.
Сам logback.xml лежит, где и должен, в папке "src/main/resources".
Сам logback.xml лежит, где и должен, в папке "src/main/resources".
Для решения проблемы надо при запуске maven указать цель "resources:resources" перед "war:war".
Кроме того, в pom.xml, в секции <build> указываем:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>logback.xml</include>
</includes>
</resource>
</resources>
ВАЖНО! Мы специально указываем явно ресурсы, т.к. хотим, чтобы в WAR попали только они (в данном случае он). Если не указать в pom.xml, то будут взяты все ресурсы из "src/main/resources".
ВСЕ. После этих действий logback.xml попадает в WAR-ник, и в папку "war/WEB-INF/classes" проекта.
В решении второй и третьей задач нам поможет сам logback. Дело в том, что при поиске конфигурационного файла сначала ищется logback.groovy, затем logback-test.xml и затем уже собственно logback.xml. C groovy могут быть проблемы (ERROR in ch.qos.logback.classic.LoggerContext[default] - Groovy classes are not available on the class path. ABORTING INITIALIZATION.), поэтому забудет про этот файл.
В "src/test/resources" кладем logback.xml и настраиваем его работы в Unit тестах. А в "src/main/resources" кладем logback-test.xml и настраиваем его для работы в Dev Mode.
ВАЖНО! Мы специально указываем явно ресурсы, т.к. хотим, чтобы в WAR попали только они (в данном случае он). Если не указать в pom.xml, то будут взяты все ресурсы из "src/main/resources".
ВСЕ. После этих действий logback.xml попадает в WAR-ник, и в папку "war/WEB-INF/classes" проекта.
В решении второй и третьей задач нам поможет сам logback. Дело в том, что при поиске конфигурационного файла сначала ищется logback.groovy, затем logback-test.xml и затем уже собственно logback.xml. C groovy могут быть проблемы (ERROR in ch.qos.logback.classic.LoggerContext[default] - Groovy classes are not available on the class path. ABORTING INITIALIZATION.), поэтому забудет про этот файл.
В "src/test/resources" кладем logback.xml и настраиваем его работы в Unit тестах. А в "src/main/resources" кладем logback-test.xml и настраиваем его для работы в Dev Mode.
Дело в том, что при запуске Unit тестов папка "src/main/resources" не подключается. А вот при запуске приложения в Dev Mode папка "src/test/resources" подключается и с этим ничего нельзя сделать, т.к. это папка с исходным кодом.
В результате в папке "src/main/resources" у нас будет два конфигурационных файла: logback.xml, который попадет в WAR-ник, и
logback-test.xml, который будет использоваться для Dev Mode.
Далее рассмотрим ситуацию, когда у нас одинаковая конфигурация для Dev Mode и для WAR.
Тогда можно там оставить один logback.xml в "src/main/resources". При запуске в Dev Mode будет взят именно файл из "src/main/resources" в соответствии с порядком подключения.
Чтобы не завязываться на порядок подключения, можно завести в "src/main/resources" дубликат logback.xml и назвать его logback-test.xml.
Еще одна проблема - при запуске Unit тестов у нас будет два файла logback.xml в classpath - один из папки "war/WEB-INF/classes" (для WAR) и один из "src/test/resources". Если все хорошо, то первым будет загружен (и следовательно использован) именно файл из "src/test/resources".
Единственный вариант полного избегания зависимости от порядка подключения - это:
Еще одна проблема - при запуске Unit тестов у нас будет два файла logback.xml в classpath - один из папки "war/WEB-INF/classes" (для WAR) и один из "src/test/resources". Если все хорошо, то первым будет загружен (и следовательно использован) именно файл из "src/test/resources".
Единственный вариант полного избегания зависимости от порядка подключения - это:
- файл для WAR назвать logback.xml
- файл для Unit тестов назвать logback-test.xml
- файл для Dev Mode задать через groovy, и назвать его logback.groovy
Здесь надо разобраться как подключить groovy.
Пока работает порядок подключения - можно не заморачиваться.
Вроде как все.
Если что-то непонятно, то пишите комментарии, будем прояснять.
Спасибо за внимание.
Комментариев нет:
Отправить комментарий