grails中的log4j:在附加程序配置中使用变量时打印错误

我在grails 2.3.4中使用slf4j“ DailyRollingFileAppender”.

当我尝试使用变量作为“文件”参数的一部分时,grails始终会在应用启动时打印一些错误日志.

但是我的应用程序的日志消息可以按预期方式打印到指定的“ user-event.log”中,尽管grails会给我这些错误消息.

以下是我的log4j配置:

log4j = {
    // Example of changing the log pattern for the default console appender:
    appenders {
        console name: 'stdout', layout: pattern(conversionPattern: '%c{2} %m%n')
        appender new DailyRollingFileAppender(
                name: "userEventLog",
                file: "${event.log.dir}/user-event.log",
                layout: pattern(conversionPattern: '%m%n'),
                datePattern: "'.'yyyy_MM_dd",
                threshold: org.apache.log4j.Level.INFO
        )
    }

    info userEventLog: "app.bean.log.UserEventLog"
}

“ event.log.dir”变量的定义如下:

environments {
    development {
        // event log dir
        event.log.dir = "${userHome}/workspace/app/logs/event"
    }
    production {
        // event log dir
        event.log.dir = "/opt/www/app/logs/event"
    }
}

启动应用程序时在grails控制台中打印的错误消息是:

| Error log4j:ERROR Property missing when configuring log4j: event
| Error log4j:ERROR Property missing when configuring log4j: event

当我用字符串路径(例如“ / home / app /”)替换“ ${event.log.dir}”变量并重新启动grails时,错误消息消失了.

最佳答案
使用Holders读取配置属性.我认为它在设置log4j时将无法读取config属性本身,因为它是config本身的一部分.

import grails.util.Holders

...

log4j = {
// Example of changing the log pattern for the default console appender:
    appenders {
        console name: 'stdout', layout: pattern(conversionPattern: '%c{2} %m%n')
        appender new DailyRollingFileAppender(
            name: "userEventLog",
            file: "${Holders.config.event.log.dir}/user-event.log",
            layout: pattern(conversionPattern: '%m%n'),
            datePattern: "'.'yyyy_MM_dd",
            threshold: org.apache.log4j.Level.INFO
        )
    }

    info userEventLog: "app.bean.log.UserEventLog"
}

转载注明原文:grails中的log4j:在附加程序配置中使用变量时打印错误 - 代码日志