2013-02-13 2 views
2

Я пытаюсь настроить приложение Grails (2.2.0), чтобы иметь файл журнала для определенного пакета, а затем использовать вывод консоли для всего остального. Я также хочу убедиться, что ничто, что идет в файл журнала, также не идет на консоль (держите их полностью отдельно). Чтение через the docs Я все еще немного смущен, как это сделать. Может ли кто-нибудь помочь с примером, который выполняет это (используя DSL log4j)?Записи Grails: Несколько регистраторов и добавок

+0

Вы задумались о том, чтобы углубиться в 'log4j' и прочитать документы там (http://logging.apache.org/log4j/1.2/)? – herom

+0

... и вот несколько примеров из сети, которые помогут вам получить больше знаний о конфигурации log4j в проектах Grails. См. Http://snipplr.com/view/63391/grails-log4j-for-different-environments--an-example/ или http://grails-dev.blogspot.co.at/2012/09/setting-up -log4j-configuration-in.html – herom

ответ

3

Я получил эту работу с помощью this question. Вот что я оказался в моей Config.groovy:

log4j = { 
    appenders { 
     console name: 'stdout', layout: pattern(conversionPattern: '%d{yyyy-MM-dd/HH:mm:ss.SSS} [%t] %x %-5p %c{2} - %m%n') 

     rollingFile name: 'extraAppender', 
       conversionPattern: '%d{yyyy-MM-dd/HH:mm:ss.SSS} [%t] %x %-5p %c{2} - %m%n', 
       maxFileSize: 1024, 
       file: '/tmp/logs/extra.log' 
    } 

    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' 

    trace additivity: false, extraAppender: 'extraLogger' 
} 

Тогда в классе, который предполагается использовать extraLogger, я просто иду логгер как это:

def extraLogger = LoggerFactory.getLogger('extraLogger') 

Это позволяет мне войти еще вещи на консоль и некоторые другие специфические вещи в другой файл журнала, без каких-либо конкретных событий, заканчивающихся в журнале консоли.

+0

+1: это, пожалуй, самый чистый подход. При тщательной манипуляции с аддитивностью и т. Д. Вы можете получить все для пакета 'foo.bar' в дополнительный журнал, но тогда вам также нужно будет повторно назначить каждый подпакет' foo.bar.baz' обратно на 'stdout' Appender. Отдельный подход к регистрации гораздо проще и менее хрупким. –

+0

Я бы не пошел таким путем, так как это ограничило бы способ загрузки разных журналов для пакетов/классов и заставил бы меня иметь два объекта журнала, если я хочу получить дополнительную информацию, но если вы хороши идти с ним все в порядке :) – herom

+0

В моем случае, наличие 2 регистраторов - это именно то, что мне нужно. Я уверен, что есть много случаев, когда это не подходит тем, что нужно другим. – user605331

Смежные вопросы