7

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

但是,我根本无法log4J填充 usage.log 文件,尽管它很高兴地记录到下面定义的“默认”附加程序。

任何人都可以就我的设置为什么不起作用提供任何线索吗?

我的 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")

似乎没有其他记录或描述的方式有效,理想情况下我可以在包或类的基础上对其进行配置,但这有效。

4

1 回答 1

2

您需要小心使用infoet 的命名参数类型。人。预计。以下配置适用于 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"]
} 
于 2012-11-06T11:06:45.743 回答