как использовать 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)