2014-10-27 2 views
1

Как изменить категорию ведения журнала для встроенного объекта журнала, предоставляемого классам обслуживания в Grails?Изменение категории журнала для класса сервиса grails

Что я имею в виду что-то вроде следующего:

package com.company.service 
class MyService { 
    def myServiceMethod(){ 
     log.debug "At your service..." // <-- goes to category my.new.category 
    } 
} 

Я мог бы просто вручную создать объект Logger и явно выбрать категорию, затем - так же, как вы обычно делаете, если вы пишете классы в Java (т.е. что-то вроде private static Logger log = Logger.getLogger('my.new.category')), но хотел посмотреть, есть ли способ изменить категорию встроенного объекта журнала grails.

Почему? Поскольку все наши классы обслуживания находятся в одном пакете, но мы хотели бы иметь возможность контролировать уровни журналов независимо друг от друга.

+2

Вы уже можете контролировать уровень протоколирования каждого класса (например, обслуживание) 'отладки«grails.app.services.my.whatever.package.MyService»' и 'warn" grails.app.services.my.whatever.package.MyOtherService "' будет устанавливать разные уровни ведения журнала в вашем 'Config.groovy' для двух служб. Вы даже можете изменить его (через код) во время работы приложения. –

ответ

2

Даже если все ваши услуги находятся в одном пакете, вы по-прежнему можете устанавливать индивидуальные уровни ведения журнала на услугу.

Например:

// Config.groovy 
log4j.main = { 
    ... 
    debug 'grails.app.services.my.whatever.package.MyService' 
    warn 'grials.app.services.my.whatever.package.MyOtherService' 
    info 'grails.app.services.my.whatever.package.MyFinalService' 
} 

Если вы действительно должны вы можете даже изменить их, пока ваше приложение работает. Вот очень простой пример того, как это делается:

Logger.rootLogger.getLogger('grails.app.services.my.whatever.MyOtherService').level = org.apache.log4j.Level.toLevel('DEBUG') 
+0

Ничего себе. Не знал, что вы можете установить уровень на уровне класса. Наше приложение работает на сервере приложений, где управление протоколом управляется глобальным файлом log4j xml. Поэтому не уверен, что это сработает для нас, так как я не думаю, что Log4j сам поддерживает имена классов как часть категорий ведения журнала. – GreenGiant

+0

@GreenGiant Я уверен, что Log4j поддерживает имена классов как часть определения того, что регистрируется. Grails DSL - просто простой строитель для стандартного формата log4j, не происходит никакой специальной магии, что делает log4j поддержкой только через Grails. –

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