Java >> Java tutorial >  >> Tag >> Log4j

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");
  }
}

Java tag