开发者

Log4J log messages are being logged to app-log and stdout for grails app

I am trying to prevent the app log messages from going out to STDOUT also.

I have the following configuration for logging:

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

The logs that are outputting on my application file are fine. The problem is that the catalina.out duplicates each line in it. I dont want the catalina.out to grow too much. And I only want only WARN and above in the catalina.out. How do I do this?

Update: I updated the above question. Previously I indicated the messages were logged twice in catalina. I figured out how to fix that. However, it still logs the message once which I dont want. I only want WARN messages.

Update 2: I think I know the issue but I dont know how to solve it. The catalina.out log file is not configured via the config above. In t开发者_高级运维he default catalina.sh start script, all standard output is written to the catalina.out file. So my log messages that are being written to the appLog are also being written to stdout. So the real problem is, based on the above config file, why are the contents of my appLog also being outputted to stdout.


Note to self: RTFM!!!!

I was reading the wrong version of the Grails logging document. The latest version is here and logging is explained well. My needs slightly changed also. All ERRORs (and above) are logged in catalina.out (aka stdout). My appLog logs everything in INFO properly.

If I wanted to log all WARNing message to catalina.out, I add the following:

root{
  warn()
}

The following removes all my application logs from the 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']
}


I think I see what's going on- I don't see a logger configured for warn and above for your site- I do see the appender I think you're referring to, but you need to configure a logger with the desired level to use it. See here.

For example, if your site is mysite.some.packages, you can create a logger to log all messages with level >= warn in the site to the rollingfile:

warn rollingFile: "mysite"
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜