Generisk måde at getLogger fra log4j.Logger på
Hvis du opretter en underklasse, bliver logmeddelelserne logget til underklassens logger.
package pkgone;
public class SuperType {
private Logger log = Logger.getLogger(this.getClass());
public void someAction() {
log.info("Doing something");
}
}
.
package pkgtwo;
import pkgone.SuperType;
public class SubType extends SuperType {
// for instances of SubType, the log object in SuperType
// will get initialized with SubType's class object
}
.
// some code somewhere that uses SubType
SubType obj = new SubType();
obj.someAction();
I ovenstående eksempel vil "Doing something" blive logget til pkgtwo.SubType-loggeren i stedet for pkgone.SuperType-loggeren, som måske er, hvad du ønsker.
Prøv på denne måde at slå en generisk klasse op...
private static final Log LOGGER = Logger.getLogger(MethodHandles.lookup().lookupClass());
Det bedste er, at du kan bruge denne metode statisk.
Hvis du ikke vil gentage for at lave logger
og vil undgå at skrive et forkert klassenavn, er der @Log for Project Lombok.
Hvis du ikke har noget imod at bruge endnu et bibliotek i dit projekt, kan du blot tilføje en logger med en simpel annotering.
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
@Log
public class LogExample {
public static void main(String... args) {
log.error("Something's wrong here");
}
}