Pracuję nad projektem i obecnie pracuję nad implementacją niektórych logów z log4j i byłem ciekawy, jak powinienem wdrożyć dzienniki. Obie implementacje jestem kopanie wokół są następujące:Java Logging With Abstract Classes
Pierwsza opcja
Zastosowanie pojedynczego dziennika z super klasy dla tej klasy i wszystkie klasy podrzędne:
public abstract class AbstractFoo {
protected static Log LOG = LogFactory.getLog(AbstractFoo.class);
...
}
public class Foo extends AbstractFoo {
public void someMethod() {
LOG.info("Using abstract log");
}
}
Druga opcja
Stosuj indywidualne dzienniki dla każdej klasy, super i sub:
public abstract class AbstractFoo {
private static Log LOG = LogFactory.getLog(AbstractFoo.class);
...
}
public class Foo extends AbstractFoo {
private static Log LOG = LogFactory.getLog(Foo.class);
public void someMethod() {
LOG.info("Using own log");
}
}
Co ma większy sens i dlaczego?
Do tej pory widziałem dwa podejścia: statyczne rejestratory (jak w pytaniu) i niestatyczne rejestratory (jak w twoim przykładzie). Czy statyczne rejestratory nie są lepszym rozwiązaniem (jedna instancja rejestratora dla wszystkich instancji)? –
statyczne rejestratory są lepsze, jeśli są takie same dla wszystkich instancji. W przypadku klasy abstrakcyjnej klasa instancji nie jest taka sama. –
Podoba mi się to, wydaje się dobrym sposobem na połączenie obu opcji.Kończy się jeden dziennik, ale wiąże się z odpowiednią klasą. +1 – shuniar