【发布时间】:2019-12-28 20:13:58
【问题描述】:
我最近将我的 logback 配置文件从 logback.xml 切换到 logback.groovy。在这类事情上,将 DSL 与 Groovy 一起使用比 XML 更通用。
我需要以编程方式分析这个文件,就像我分析以前的 XML 文件(任何无数的解析工具)一样。我意识到这将是不完美的,因为 DSL 配置文件位于它配置且必须执行的对象之上,因此其结果不可避免地是动态的,而 XML 文件是静态的。
如果您想在另一个文件中包含一个 Groovy 文件,有一些解决方案。 This one 为我工作。
但我很难从结果中找到我需要的东西。
如果我把这样的函数放在 DSL 文件中...
def greet(){
println "hello world"
}
...我不仅可以执行它(config.greet()如下),而且我去的时候也可以看到它列出来
GroovyShell shell = new GroovyShell()
def config = shell.parse( logfileConfigPath.toFile() )
println "config.class.properties ${config.class.properties}"
但是如果我在 DSL 文件中加入这样的一行...
def MY_CONSTANT = "XXX"
...我不知道如何找到它并获得它的价值(config.class.properties 的混乱和丰富的输出中没有它)。
PS 打印出config.properties 只是给出这个:
[class:class logback, binding:groovy.lang.Binding@564fa2b]
...是的,我确实看过config.binding.properties:什么都没有。
进一步思考
我的问题是,更广泛地说,是否有任何工具可用于分析 Groovy DSL 配置文件。鉴于如果没有它正在配置的底层对象(在 Gradle 的情况下实现 org.gradle.api.Project 的对象;我不知道在 logback 的情况下它可能是什么类),这样的文件是毫无意义的,你会想到那里需要仪器来连接这样的对象,然后以受控、可观察的方式观察配置文件的效果。如果 Groovy DSL 配置文件要像它们的 XML 对应文件一样通用,那么您肯定需要这些方面的东西吗?注意我怀疑org.gradle.tooling.model.GradleProject 或org.gradle.tooling.model.ProjectModel 可能会达到这个目的。不幸的是,目前我无法让GradleConnector 工作,详情为here。
我认为 logback 没有这种类型的东西,目前我不知道它的 DSL 或可配置对象,或者后者的类或接口......
【问题讨论】:
标签: parsing groovy logback dsl