Сообщения журнала Log4J записываются в app-log и stdout для приложения grails - PullRequest
1 голос
/ 19 января 2011

Я пытаюсь предотвратить отправку сообщений журнала приложения в 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 росла слишком сильно.И я хочу только WARN и выше в catalina.out.Как мне это сделать?

Обновление : я обновил вышеупомянутый вопрос.Ранее я указывал, что сообщения были дважды зарегистрированы в каталине.Я понял, как это исправить.Однако, это все еще регистрирует сообщение однажды, которое я не хочу.Мне нужны только сообщения WARN.

Обновление 2 : мне кажется, я знаю проблему, но не знаю, как ее решить.Файл журнала catalina.out не настроен через конфигурацию выше.В сценарии запуска catalina.sh по умолчанию все стандартные выходные данные записываются в файл catalina.out.Так что мои сообщения журнала, которые записываются в appLog, также записываются в stdout.Таким образом, реальная проблема заключается в том, что на основе приведенного выше файла конфигурации содержимое моего appLog также выводится в stdout.

Ответы [ 2 ]

1 голос
/ 31 января 2011

Примечание для себя: RTFM !!!!

Я читал не ту версию журнала регистрации Grails. Последняя версия - здесь , и логирование объяснено хорошо. Мои потребности немного изменились. Все ОШИБКИ (и выше) регистрируются в catalina.out (он же stdout). Мой appLog правильно регистрирует все в INFO.

Если я хочу записать все ПРЕДУПРЕЖДАющее сообщение на 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']
}
0 голосов
/ 24 января 2011

Я думаю, что вижу, что происходит - я не вижу регистратор , настроенный для предупреждения и выше для вашего сайта - я вижу appender Я думаю, что вы ссылаетесь к, но вам нужно настроить регистратор с желаемым уровнем для его использования. Смотри здесь .

Например, если ваш сайт mysite.some.packages, вы можете создать регистратор для записи всех сообщений с уровнем> = warn на сайте в скользящий файл:

warn rollingFile: "mysite"
...