使用grails中的文件追加器和stdout记录配置

时间:2013-06-14 23:27:47

标签: grails log4j

我的grails应用程序中有一个配置错误导致我的appender将输出发送到错误的位置,或者根本没有。似乎有一些关于重复记录的问题,但我无法对我的情况应用任何答案。

这是我的日志配置代码段:

log4j = {

        appenders {
                // appender for usage tracking
                appender new org.apache.log4j.RollingFileAppender(
                        name:"usageAppender",
                        maxFileSize:"1000KB",
                        maxBackupIndex: 10000,
                        file: "/var/log/tomcat6/app/usage.log",
                        layout:pattern(conversionPattern: '%d{DATE} %5p %c{1}:%L - %m%n')
                )
                appender new org.apache.log4j.RollingFileAppender(
                        name:"application",
                        maxFileSize:"1000KB",
                        maxBackupIndex: 10000,
                        file:"/var/log/tomcat6/app/application.log",
                        layout:pattern(conversionPattern: '%d{DATE} %8X{memoryused} %5p %t %c{1}:%L %X{username} %X{request} - %m%n')
                )
                console name:'stdout', layout:pattern(conversionPattern: '%d{DATE} %8X{memoryused} %5p %t %c{1}:%L %X{username} %X{request} - %m%n')
        }
        root {
                // also tried error 'stdout'
                error  'application'
        }

        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.web.mapping.filter', // URL mapping
                   'org.codehaus.groovy.grails.web.mapping', // URL mapping
                   'org.codehaus.groovy.grails.commons', // core / classloading
                   'org.codehaus.groovy.grails.plugins', // plugins
                   'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
                   'org.springframework',
                   'org.hibernate'

        info 'usageAppender':'usage.gui'
}

当我的程序运行时,输出会显示在catalina.outusage.logapplication.log中。直接发送到stdout的输出(绕过log4j)出现在catalina.out

如果我设置

 info additivity: false 'usageAppender': 'usage.gui'

然后没有任何内容记录到任何文件appender,但stdout仍然进入catalina.out(绕过log4j)。

我希望'usage.gui'记录器的输出转到usage.log文件,从所有其他记录输出转到application.log文件,并且所有print语句输出都去到catalina.out。我不想要冗余日志记录。我该如何配置?

更新 在回答@ dmahapatro的问题时,使用标准grails logging

来登录应用程序
log.trace('some event');

或使用这样创建的自定义记录器:

def usageLog
public UsageService() {
    usageLog = Logger.getLogger("usage.gui")
}

并通过调用此函数使用:

protected void writeRecord(String topicId, String user, Long id, Long priorId, Long clientTime, String component, String action, String otherData) {
    String msg = "$topicId\t$user\t$id\t$priorId\t$clientTime\t$component\t$action\t$otherData"
    usageLog.info(msg)
}

2 个答案:

答案 0 :(得分:0)

尝试此设置。

  • stdout保留在root位置(如果需要,请将级别更改为info / debug / all)。设置false的可加性,以限制控制台日志被添加到usageapplication appender。
  • 其他appender继承自root,为additivityfalse设置application usage以限制控制台日志记录。
  • 使用grails.app针对applicationapplication.log中记录所有与应用程序相关的日志。

像:

root {
         error 'stdout'
         additivity: false
     }

info usageAppender: 'usage.gui'
        additivity: false

info application: 'grails.app'
       additivity: false

注意: -
不同日志记录级别的日志不适用于相同的包结构。例如:

info usageAppender: 'usage.gui'
error usageAppender1: 'usage.gui'

只会记录error的{​​{1}}。

答案 1 :(得分:0)

大多数情况下,您没有看到src / groovy中的日志打印,因为在应用程序中设置了更高级别的ERROR。因此,如果将所有类日志设置为调试级别,则记录器调试正在运行。