Как правильно инициализировать slf4j (используя log4j) logger в абстрактных классах / для наследования
в моем проекте у меня есть абстрактный класс верхнего уровня 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 сообщение регистрируется в 
2 ответов
вход в абстрактные классы считается анти-шаблоном некоторыми, потому что он вводит потенциально неожиданную зависимость. Однако, если вы уверены, что все вещи, с которыми вы имеете дело, ваши собственные, что это не проблема, я думаю.
Если вы хотите получить сообщение журнала, чтобы показать конкретную реализацию, а не абстрактное имя класса (что имеет смысл), то измените оператор инициализации журнала в абстрактном классе на:
private final Logger logger = LoggerFactory.getLogger(getClass());
вместо что-то вроде:
private static final Logger logger = LoggerFactory.getLogger(MyAbstractClass.class);
то есть
- нет статики, потому что он может быть приведен к чему-то другому.
- getClass () вместо конкретного класса
 Спасибо за указание правильного направления для поиска возможных исправлений skaffman. В конце концов я изменил свой log4j.properties (как один из примеров в документация PatternLayout говорит):
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=%-6r [%15.15t] %-5p %30.30c %x - %m%n
...и все регистрируется правильно.
