grails中的dailyrollingfileappender

时间:2014-07-30 15:39:49

标签: grails logging log4j

我想在grails应用程序中使用发送日志消息来按小时滚动文件。以下是我在Config.groovy

中配置log4j的方法
appenders {
    rollingFile name:"stacktrace",
                file: "/tmp/logs/app.log",
                conversionPattern: '%-5p %d{MM-dd HH:mm:ss} %m  (%F:%L)'

    appender new DailyRollingFileAppender(
            name: "events",
            datePattern: "'.'yyyy-MM-dd-HH:mm",
            file: "/tmp/logs/app_events.log",
            layout: pattern(conversionPattern: "%c{2} %m%n")
    )
}

root {
    error 'stacktrace'
}

error  'org.codehaus.groovy.grails.web.servlet',        // controllers
        'org.codehaus.groovy.grails.web.pages',          // GSP
        'org.codehaus.groovy.grails.web.sitemesh',       // layouts
        'org.codehaus.groovy.grails.commons',            // core / classloading
        'org.codehaus.groovy.grails.plugins',            // plugins
        'org.springframework'
info  events: "com.app.events", additivity: false

这就是我在com.app.events包中获取事件的记录器:

LOG = Logger.getLogger('events')
LOG.info("logging info")

我不确定我在这里缺少什么。我没有看到任何日志打印。如果我在root中添加info 'events',它可以工作,但所有包中的日志也都在app_events.log内,这不是我想要的。我只希望来自com.app.events包的日志进入app_events.log。

1 个答案:

答案 0 :(得分:0)

Config.groovy中日志记录说明行的部分是:

// "Logging Level" "Appender Name": "Logger Name", "Other Options"
info  events: "com.app.events", additivity: false

在您检索记录器的位置:

// LOG = Logger.getLogger("Logger Name")
LOG = Logger.getLogger('events')

为了让events appender接收包com.app.events日志记录,请更改您将记录器检索到的方式:

LOG = Logger.getLogger('com.app.events')

在根块中使用error 'stacktrace'可能会影响log4j。 stacktrace appender是一个特殊的appender,只适用于完整的堆栈跟踪。尝试添加另一个appender作为根appender,并在根块中使用它代替'stacktrace'

appenders {
    appender new DailyRollingFileAppender(
        name: "base",
        datePattern: "'.'yyyy-MM-dd-HH:mm",
        file: "/tmp/logs/app_events.log",
        layout: pattern(conversionPattern: "%c{2} %m%n")
    )
}

root {
    error "base"
}