log4j:参数appender文件名

时间:2013-01-25 15:23:29

标签: grails groovy log4j grails-2.0

我使用Grails

在我的文件Config.groovy中,我创建了一个appender:

log4j = {

    appenders {
        file name:'myAppli', file:'/tmp/myAppli.log'
    }
...
}

是否可以通过file.properties

的数据来参数化appender的文件路径

类似的东西:

file.properties:
myAppli.log.path=C:\\tmp\\


Config.groovy:
appenders {
    file name:'myLogs', file:myAppli.log.path + 'myLogs.log'
}

3 个答案:

答案 0 :(得分:1)

文档中有一节针对此:externalized configuration。您可以设置绝对位置或让Grails查看类路径。以下是文档的示例:

grails.config.locations = [
    "classpath:${appName}-config.properties",
    "classpath:${appName}-config.groovy",
    "file:${userHome}/.grails/${appName}-config.properties",
    "file:${userHome}/.grails/${appName}-config.groovy" ]

编辑:我在这里测试过。似乎该值仅在运行时期间通过配置对象可用,而在Config.groovy中不可用。根据{{​​3}}帖子,你不可能做你想做的事。

答案 1 :(得分:1)

myAppli.log.path应该可以工作!!!

答案 2 :(得分:0)

你几乎是对的。在解析和组装整个配置后执行log4j闭包,在闭包内,您可以通过变量config访问完整配置。你可以说

grails.config.locations = ['file:file.properties']

log4j = {
    appenders {
        file name:'myAppli', file:"${config.myAppli.log.path}myLogs.log"
    }
    // ...
}

我已使用Grails 2.2进行了测试:运行grails create-app log4jtest以创建新应用,然后编辑log4jtest/grails-app/conf/Config.groovy以添加到顶部

grails.config.locations = ["file:file.properties"]
logfile.name = "from-config.log"

log4j关闭

// log4j configuration
log4j = {
    println "filename: ${config.logfile.name}"
    // rest of closure as before

使用grails run-app运行此应用,您会看到它打印filename: from-config.log(实际上是两次)。现在,在包含行

的顶级file.properties文件夹中创建一个名为log4jtest的文件
logfile.name=from-external.log

再次运行该应用,这次它将打印filename: from-external.log