Log4J日志消息正被记录到app-log和stdout for grails app

时间:2011-01-19 02:34:38

标签: linux tomcat grails groovy log4j

我正在尝试防止应用程序日志消息也出现在STDOUT中。

我有以下配置用于记录:

log4j = {

  appenders {
    rollingFile name: 'applog', file: "${System.properties.getProperty('catalina.base')}${File.separator}logs${File.separator}application.log".toString(), layout: pattern(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p%c{1} - %m%n'), maxFileSize: '1MB'
    file name: 'stacktrace', file: "${System.properties.getProperty('catalina.base')}${File.separator}logs${File.separator}stacktrace.out".toString(), layout: pattern(conversionPattern: '%c{2} %m%n')
    console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
  }

  error stacktrace: "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.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',
          'net.sf.ehcache.hibernate'

  warn 'org.mortbay.log'
  info 'grails.app'

  root {
    info applog
    error 'stdout'
    additivity=false
  }
}

在我的应用程序文件上输出的日志很好。问题是catalina.out重复了它中的每一行。我不希望catalina.out增长太多。我只想在catalina.out中使用WARN及以上版本。我该怎么做?

更新:我更新了上述问题。以前我说过这些消息在catalina中记录了两次。我想出了如何解决这个问题。但是,它仍然记录了我不想要的消息。我只想要WARN消息。

更新2 :我想我知道这个问题,但我不知道如何解决它。 catalina.out日志文件未通过上面的配置进行配置。在默认的catalina.sh启动脚本中,所有标准输出都写入catalina.out文件。因此,我写入appLog的日志消息也会写入stdout。所以真正的问题是,基于上面的配置文件,为什么我的appLog的内容也被输出到stdout

2 个答案:

答案 0 :(得分:1)

自我注意:RTFM !!!!

我正在阅读错误版本的Grails日志记录文档。最新版本为here,并且很好地解释了日志记录。我的需求也略有改变。所有ERROR(及以上)都记录在catalina.out(aka stdout)中。我的appLog正确记录了INFO中的所有内容。

如果我想将所有WARNing消息记录到catalina.out,我添加以下内容:

root{
  warn()
}

以下内容从stdout中删除了我的所有应用程序日志:

log4j = {
  appenders {
    rollingFile name: 'applog', file: ${System.properties.getProperty('catalina.base')}${File.separator}logs${File.separator}application.log".toString(), layout: pattern(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n'), maxFileSize: '10MB'
    console name: 'stdout', layout:pattern(conversionPattern: '%c{2} %m%n'), threshold: org.apache.log4j.Level.WARN
  }
  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',
          'net.sf.ehcache.hibernate'

  warn 'org.mortbay.log'

  info applog: ['grails.app', 'myapp', 'com.myapp']
}

答案 1 :(得分:0)

我想我知道发生了什么 - 我没有看到为你的网站配置警告及以上的记录器 - 我确实看到 appender 我认为你'请参考,但您需要配置具有所需级别的记录器才能使用它。请参阅here

例如,如果您的站点是mysite.some.packages,则可以创建一个记录器,将站点中级别为> = warn的所有消息记录到rollfile:

warn rollingFile: "mysite"