В моем проекте у меня есть абстрактный класс верхнего уровня FrameProducer
. Я добавил регистратор slf4j на этом уровне, чтобы он уже был у каждого наследующего класса. Вот код:
public abstract class FrameProducer extends Observable {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
protected BufferedImage frame;
public BufferedImage getFrame() {
return frame;
}
public void fireEvent() {
logger.debug("Firing event. Implementing class: {}", this.getClass());
setChanged();
notifyObservers();
}
}
Есть также два наследующих класса: CameraFrameGrabber
и GrayscaleFilter
. Все же, когда метод fireEvent ()
вызывается из CameraFrameGrabber
или GrayscaleFilter
, сообщение регистрируется на уровне FrameProducer
. Вот журнал, для ясности:
FrameProducer.fireEvent - Firing event. Implementing class: class com.ofj.frameaccess.CameraFrameGrabber
FrameProducer.fireEvent - Firing event. Implementing class: class com.ofj.frameaccess.GrayscaleFilter
Можно ли инициализировать регистратор в FrameProducer
таким образом, чтобы все регистрировалось на наиболее специализированном уровне в моей иерархии классов?
Спасибо за любую помощь. .
Изменить: Мой log4j.properties выглядит так:
log4j.rootCategory=TRACE, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C{1}.%M - %m%n