как использовать logback, настроенный через logback.груви с Groovy
Я не могу использовать logback, настроенный через logback.груви с Groovy.
Если в каталоге у меня есть файл сценария, называемый, например, FooBar.groovy и файл logback.отличный
когда я бегу groovy FooBar.groovy
groovy пытается компилировать файл конфигурации logback, и мой скрипт не работает, я должен вернуться к файлу конфигурации xml по умолчанию для logback (logback.XML.)
Как я могу это сделать? могу я позвонить groovy somefiles.groovy
и настроить groovy для игнорирования Logback так.в Groovy?
Спасибо за помощь
2 ответов
причина ваших проблем заключается в том, что файл конфигурации logback никогда не должен компилироваться. Он читается во время выполнения из LogBack через GroovyShell
или подобный механизм.
решение зависит от настроек проекта. Ниже вы найдете решение для сборки проекта с помощью ш вслед за Maven Стандартный Макет Каталога:
первый файл src/main/groovy/Test.groovy
:
import org.slf4j.Logger
import org.slf4j.LoggerFactory
class Test {
static Logger LOG = LoggerFactory.getLogger(Test.class)
static void main(String[] args) {
LOG.debug("Test")
}
}
второй файл src/main/resources/logback.groovy
:
import static ch.qos.logback.classic.Level.INFO
import static ch.qos.logback.classic.Level.DEBUG
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender
appender("CONSOLE", ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "%-4relative [%thread] - %msg%n"
}
}
root(DEBUG, ["CONSOLE"])
Я опустил файл сборки Gradle (build.gradle
).
стандартный макет каталога гарантирует, что каждый файл в src/main/groovy
компилируется, в то время как все в src/main/resources
включен в путь к классу. Таким образом, LogBack может найти этот файл во время выполнения.
обновление: недостаточно внимательно прочитал вашу проблему. Мне не удалось решить проблему, когда оба файла находятся в одном каталоге, и я запускаю его через groovy Test.groovy
. Я думаю это невозможно. Команда groovy всегда компилирует все файлы groovy в текущем каталоге и в заданном пути к классам.
у меня была такая же проблема в среде Eclipse Greclipse (и пришел к этому вопросу как лучшая ссылка на проблему через Google). Он будет легко адаптироваться к другим Groovy средам,а также и основные принципы / настройки будут выполняться.
вот что нужно сделать/обеспечить:
Project -> Properties -> Java Build Path
...
-
-> Source -> Add Folder
или проверьте правильность настройки- все соответствующие файлы должны быть в формате
Included
(например(All)
), а не вExcluded
(например,(None)
) модели -
src/main/groovy/
(должен содержать ваши классные классы) -
src/test/resources/
(гдеlogback.groovy
прямо под ним)
- все соответствующие файлы должны быть в формате
- убедитесь, что под
-> Output Folders
наsrc/main/resources
доsrc/test/resources
правоlogback.groovy
(если у вас есть один для проверки) принимается в обычном режиме
Project -> Properties -> Groovy Compiler -> Groovy Script Folders
...
-
[ ] src/main/groovy/**/*.groovy
(или аналогичный шаблон для ваших классов должен быть снят) -
[x] src/main/resources/**/*.groovy
(или аналогичный шаблон для вашего нормальногоlogback.groovy
необходимо проверить) -
[x] src/test/resources/**/*.groovy
(или аналогичный шаблон для вашего тестаlogback.groovy
необходимо проверить)
тест и нормальный logback.groovy
должно работать этот путь.
в результате вы должны увидеть следующее скопирована с исходный ресурс для целевых папок:
target/classes/logback.groovy
target/test-classes/logback.groovy
Примечание: кроме того, если вы используете Groovy внутри ANT в Eclipse, все, что вам нужно сделать, это Windows -> Preferences -> Ant -> Runtime -> Classpath -> Ant Home Entries -> Add Variable... -> ${project_classpath}
и logback.groovy
также будет применяться должным образом:).
(После ${project_classpath}
не похоже (всегда) экспортировать в указанном выше порядке, нам пришлось вручную Add Folder -> target/classes
и двигаться выше других, чтобы заставить его работать с правой logback.groovy
)