有时我会在Grails应用的Config.groovy
中看到类似的内容:
log4j = {
appenders {
...
}
root {
...
}
...etc.
}
这显然是一种指定log4j配置的编程方式。我想知道:
log4j.xml
文件中指定log4j配置,然后告诉Grails应用程序在哪里查找它?log4j.xml
放在Grails应用程序中,以及如何/在何处将其“连接”到应用程序?答案 0 :(得分:2)
默认情况下,Grails不会使用log4j.xml。你有几个选择。
将Spring连接起来使用log4j.xml。如果您不熟悉Spring和所需的bean,这可能会有些复杂。您和我already discussed。
使用Grails的Log4j XML plugin。
对于简单的用例,第二种选择是首选。
<强>更新强>
根据您在评论中的后续问题,您可能最好使用DSL语法直接在插件中配置日志记录。在另一篇文章中提到explains how this is done。
答案 1 :(得分:0)
Grails会自动排除grails-app/conf
中与log4j.*
匹配的任何文件:
来自scripts/_GrailsWar.groovy
:
ant.copy(todir:"${stagingDir}/WEB-INF/classes", failonerror:false, preservelastmodified:true) {
fileset(dir:"${basedir}/grails-app/conf") {
exclude(name:"*.groovy")
exclude(name:"log4j.*")
exclude(name:"**/hibernate/**")
exclude(name:"**/spring/**")
}
fileset(dir:"${basedir}/grails-app/conf/hibernate", includes:"**/**")
fileset(dir:"${grailsSettings.sourceDir}/java") {
include(name:"**/**")
exclude(name:"**/*.java")
}
fileset(dir:"${grailsSettings.sourceDir}/groovy") {
include(name:"**/**")
exclude(name:"**/*.groovy")
}
fileset(dir:"${resourcesDirPath}", includes:"log4j.properties")
}
正如所指出的,还有其他方法可以在不使用log4j.xml
文件的情况下实现您想要的功能,但如果您确实想要使用它,则可以向grails-app/conf/BuildConfig.groovy
添加一些逻辑以确保它被打包在你的WAR中:
grails.war.resources = { stagingDir, args ->
copy(todir:"${stagingDir}/WEB-INF/classes", failonerror:false, preservelastmodified:true) {
fileset(dir:"${basedir}/grails-app/conf") {
include(name:"log4j.xml")
}
}
}