grails Config.groovy中的log4属性注入
我想在我的config.groovy中注入存储在属性文件中的log4j config内容grails Config.groovy中的log4属性注入,grails,log4j,Grails,Log4j,我想在我的config.groovy中注入存储在属性文件中的log4j config内容 log4j { def props = new Properties() new File("path/to/log.properties").withReader{ props.load(it) } def slurp = new ConfigSlurper().parse(props) appenders { file name:
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'
}
}
这是我的属性文件:
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'
}
有什么建议吗?您必须读取属性文件并将其转换为Config.groovy中使用的ConfigObject
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'
}
}
参考这个。如果我正确地阅读了Grails的代码,你应该能够说
root {
"${config.config.log.root.level}" 'stdout', 'file'
}
或者如果那不行的话
root {
delegate."${config.config.log.root.level}" 'stdout', 'file'
}
通常,在log4j
闭包中,您可以访问完整的grailsApplication.config
(包括从外部配置文件中合并的选项)作为变量config
,但当您在根{}/code>块中时,似乎需要第二个config
解释-根闭包的闭包委托是一个RootLog4jConfig
对象,它有一个属性config
,指向主Log4jConfig
,主Log4jConfig
是其余log4j
闭包的委托,而它又有自己的属性config
,指向解析的ConfigObject
。不知何故,我怀疑这种行为是故意的,建议config
在root
块内部和外部解析为相同的内容可能值得一试。谢谢,我现在可以加载我的属性,但当服务器启动时,配置log4j日志记录时出现异常:没有方法签名:groovy.util.ConfigObject.level()适用于参数类型:(java.lang.String,java.lang.String)值:[stdout,file]my bad。错过了引语。更新了答案。很有效,谢谢。我并不完全理解双引号trilck,我对Groovy/Grails世界还很陌生……我已经尝试了这两种解决方案。没有输出日志,服务器启动时出现此消息log4j:ERROR属性在配置log4j时丢失:log@LaurentBOURGEOIS要使config.
工作正常,您必须在grails.config.locations
properties文件中列出外部属性文件,该文件已在my config.locationsdef envName=System.properties.getProperty(“tomcat.server.name”)grails.config.locations=[“classpath:“+envName+”-config.properties”]
@LaurentBOURGEOIS-hmm,检查它看起来像是config.config.log.root.level
可能会起作用——与根闭包外部相比,根闭包内部需要额外的“config”。我怀疑这是故意的。。。