我无法使用groovy通过logback.groovy配置的logback。
如果在目录中我有一个脚本文件,例如FooBar.groovy和文件logback.groovy
当我运行groovy FooBar.groovy
groovy尝试编译logback配置文件而我的脚本不起作用时,我必须回退到默认的xml配置文件进行logback(logback.xml)。
我怎样才能使这个工作?我可以调用groovy somefiles.groovy
并配置groovy来忽略logback.groovy吗?
感谢您的帮助
答案 0 :(得分:12)
您遇到问题的原因是永远不应该编译回溯配置文件。它在运行时通过GroovyShell
或类似的机制从LogBack中读取。
解决方案取决于您的项目设置。您将在Maven Gradle后面找到Standard Directory Layout项目构建的解决方案:
第一个文件是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文件。
答案 1 :(得分:0)
我在Eclipse Greclipse环境中遇到了同样的问题(并将此问题作为Google的最佳问题参考)。它也很容易适应其他Groovy环境,基本原则/设置也适用。
以下是需要完成/确保的事项:
Project -> Properties -> Java Build Path
...
-> Source -> Add Folder
或已正确检查已设置
Included
(例如(All)
),而不是Excluded
(例如(None)
)模式src/main/groovy/
(应包含您的Groovy类)src/test/resources/
(logback.groovy
直接位于其中)-> Output Folders
下src/main/resources
在src/test/resources
之前,所以右logback.groovy
(如果您还有一个用于测试)将在正常运行中进行< / LI>
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
should work。
因此,您应该看到以下内容已从源资源复制到目标文件夹:
target/classes/logback.groovy
target/test-classes/logback.groovy
旁注:此外,如果您在Eclipse中使用ANT内部的Groovy,您只需要Windows -> Preferences -> Ant -> Runtime -> Classpath -> Ant Home Entries -> Add Variable... -> ${project_classpath}
和logback.groovy
正确应用:)。
(由于${project_classpath}
似乎并不(始终)以上述顺序导出,因此我们必须手动Add Folder -> target/classes
并移到另一个之上以使其与正确的logback.groovy
一起使用)