【问题标题】:Log4J log messages are being logged to app-log and stdout for grails appLog4J 日志消息被记录到 grails 应用程序的 app-log 和 stdout
【发布时间】:2011-01-19 02:34:37
【问题描述】:

我也在尝试阻止应用日志消息发送到 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

【问题讨论】:

    标签: linux tomcat grails groovy log4j


    【解决方案1】:

    自我注意:RTFM!!!!

    我阅读了错误版本的 Grails 日志记录文档。最新版本是here,日志记录解释得很好。我的需求也略有变化。所有错误(及以上)都记录在 catalina.out(又名标准输出)中。我的 appLog 正确记录了 INFO 中的所有内容。

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

    root{
      warn()
    }
    

    以下内容会从标准输出中删除我的所有应用程序日志:

    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']
    }
    

    【讨论】:

      【解决方案2】:

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

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

      warn rollingFile: "mysite"
      

      【讨论】:

        猜你喜欢
        • 2022-10-15
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        相关资源
        最近更新 更多