我想在Config.groovy中注入存储在属性文件中的log4j配置文件。
这是我的属性文件:
log.file=path/to/my/log
log.root.level=info
log.grails.app.level=info
文件路径EL语法$ {}没问题,但它不适用于级别,因为它不是字符串。这是config.groovy:
appenders {
file name:'file', file:"${config.log.file}"
}
root {
${log.root.level} 'stdout', 'file'
}
有任何建议吗?
答案 0 :(得分:1)
您必须阅读属性文件并将其转换为ConfigObject才能在Config.groovy中使用。
log4j {
def props = new Properties()
new File("path/to/log.properties").withReader{
props.load(it)
}
def slurp = new ConfigSlurper().parse(props)
appenders {
file name:'file', file:"$slurp.log.file"
}
root {
"$slurp.log.root.level" 'stdout', 'file'
}
}
请参阅此similar question。
答案 1 :(得分:0)
如果我正确阅读Grails Log4J DSL parser的代码,您应该只能说
root {
"${config.config.log.root.level}" 'stdout', 'file'
}
或者如果那不起作用那么
root {
delegate."${config.config.log.root.level}" 'stdout', 'file'
}
通常,在log4j
闭包内,您可以访问完整的grailsApplication.config
(包括从外部配置文件合并的选项)作为变量config
,但看起来您需要一秒钟当你进入config
区块时,root {}
就在前面。{/ 1>
解释 - root
闭包的闭包委托是一个RootLog4jConfig
对象,它有一个属性config
,指向作为委托的主Log4jConfig
对于log4j
闭包的其余部分,它又有自己的属性config
指向已解析的ConfigObject
。我以某种方式怀疑这种行为是故意的,并且JIRA可能值得建议config
应该解决root
块内部与外部相同的事情。