Dans mon projet j'ai une classe abstraite de premier niveau FrameProducer
. J'ai ajouté un enregistreur slf4j à ce niveau, de sorte que chaque classe héritière l'ait déjà. Voici le code:Comment initialiser logger slf4j (en utilisant log4j) correctement dans les classes abstraites/pour l'héritage
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();
}
}
Il y a aussi deux classes héritant: CameraFrameGrabber
et GrayscaleFilter
. Pourtant, lorsque la méthode fireEvent()
est appelée de CameraFrameGrabber
ou GrayscaleFilter
le message est en cours d'enregistrement au niveau FrameProducer
. Ici le journal, pour plus de clarté:
FrameProducer.fireEvent - Firing event. Implementing class: class com.ofj.frameaccess.CameraFrameGrabber
FrameProducer.fireEvent - Firing event. Implementing class: class com.ofj.frameaccess.GrayscaleFilter
Est-il possible d'initialiser l'enregistreur à FrameProducer
de manière que tout se connecté au niveau le plus spécialisé dans ma hiérarchie de classes?
Merci pour toute aide.
Edit: Mon log4j.properties ressemble à ceci:
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
Cela devrait se faire par défaut. À quoi ressemble votre fichier 'log4j.properties' ou' log4j.xml'? – skaffman