Grails Log4J尝试为一个控制器登录到单独的文件只会失败

Grails Log4J尝试为一个控制器登录到单独的文件只会失败,grails,logging,log4j,Grails,Logging,Log4j,我希望在信息级别将来自grails应用程序中一个控制器的消息记录到一个特定文件中。信息或任何其他级别的所有内容都应转到另一个默认日志文件 但是,我根本无法获取log4J来填充usage.log文件,尽管它很乐意记录到下面定义的“default”appender 有人能给出我的设置不起作用的任何线索吗 我的log4j设置如下: log4j = { appenders { console name: 'stdout', layout: pattern(conversionPat

我希望在信息级别将来自grails应用程序中一个控制器的消息记录到一个特定文件中。信息或任何其他级别的所有内容都应转到另一个默认日志文件

但是,我根本无法获取
log4J
来填充usage.log文件,尽管它很乐意记录到下面定义的“default”appender

有人能给出我的设置不起作用的任何线索吗

我的log4j设置如下:

log4j = {

appenders {

    console name: 'stdout', 
    layout: pattern(conversionPattern: '%d %-5p %c{1} - %m%n')

    appender new DailyRollingFileAppender(
            name: 'default', 
            datePattern: "'.'yyyy-MM-dd",
            layout: pattern(conversionPattern: '%d %-5p %c{1} - %m%n'),
            file: 'C:/logs/default.log'
         )

    //daily usage log
    appender new DailyRollingFileAppender(
            name: 'usage', datePattern: "'.'yyyy-MM-dd",
            layout: pattern(conversionPattern: '%d %-5p %c{1} - %m%n'),
            file: 'C:/logs/usage.log'
         )
}


info usage: "grails.app.controllers.com.example.MyController", 
additivity: false

root {
    info 'stdout', 'default'
    additivity = true
}

     info 'grails.app'
}
更新

我已经能够通过将特定的控制器类映射替换为

info usage: 'usage', additivity: true
然后使用

private static final log = LogFactory.getLog("usage")

似乎没有其他记录或描述的方法可以工作,理想情况下,我可以在包或类的基础上配置它,但这是可行的。

您需要小心使用
info
等人期望的命名参数类型。以下配置适用于Grails 2.1.1测试项目:

// log4j configuration
log4j = {
    appenders {
        def logPattern = '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{2} - %m%n'
        console name: 'stdout', layout: pattern(conversionPattern: logPattern)

        appender new DailyRollingFileAppender(
            name: 'usage', datePattern: "'.'yyyy-MM-dd",
            layout: pattern(conversionPattern: logPattern),
            file: 'usage.log'
        )
    }

    root {
        error 'stdout'
    }

    info additivity: false, usage: ["grails.app.controllers.com.example.MyController"]
} 

我不确定这是否有区别,但我总是先放置不太具体的记录器定义,然后放置更具体的记录器定义(即,将
grails.app.controllers….
一个移动到
grails.app
一个之后)。您使用的是什么版本的Grails?我使用的是2.1.0。遗憾的是,移动记录器定义没有任何区别。我仍然在默认的appender文件中获得所有日志消息,在usage appender文件中没有任何消息。这绝对是正确的语法,因此它应该可以工作,除非您在
环境
块或外部配置文件中重写了
log4j
闭包。谢谢您的建议。不幸的是,我在usage appender文件中仍然没有看到任何日志消息,所有内容都进入默认状态。我尝试更改root以包含用法appender,但是从信息级别或更高级别的所有内容都会进入用法日志,这根本不是我想要的。奇怪。尝试将
System.out.println(log.name)
放入控制器的操作中,以确认它正在使用您认为它正在使用的记录器。