grails 2.1.2 log4j 配置奇怪的行为

grails 2.1.2 log4j configuration strange behavior

我有以下 log4j 配置:

log4j = {   
    appenders {
        appender new DailyRollingFileAppender(name: 'dailyAppender', ...)
    }

    root {
        error 'dailyAppender'
    }

    info 'dailyAppender' : 'com.intelli', 'grails.app'
}

"grails.app" 记录器用于 grails 工件(服务、控制器等),而 "com.intelli" 用于其他自定义记录器(如 /src/groovy/**、.. .) 用 LogFactory class.

初始化

现在的问题是,使用此配置自定义记录器 ('com.intelli') 没有记录任何内容。但是 grails 控制器和服务记录正常!

当我更改记录器的顺序时:

log4j = {   
    ...

    info 'dailyAppender' : 'grails.app', 'com.intelli'
}

自定义记录器记录正常,但是 grails 服务和控制器根本没有记录

解决方案非常棘手,您需要将记录器括在列表 ("[ ]") 括号中:

log4j = {   
    appenders {
        appender new DailyRollingFileAppender(name: 'dailyAppender', ...)
    }

    root {
        error 'dailyAppender', additivity: false
    }

    info 'dailyAppender' : ['com.intelli', 'grails.app']
}

使用此配置,一切都会正常记录。

这不是问题的一部分,但为了防止重复记录,我们需要将可加性设置为 false:

log4j = {   
    appenders {
        appender new DailyRollingFileAppender(name: 'dailyAppender', ...)
    }

    root {
        error 'dailyAppender'
    }

    info 'dailyAppender' : ['com.intelli', 'grails.app'], additivity: false
}