Se si sta costruendo un nuovo sistema, attenersi alla risposta di Webel.
Se si dispone di un sistema esistente durante la migrazione a log4j2, è comunque consigliabile eseguire i metodi di generazione (ma includo una classe di lavoro minima di seguito) ed è possibile aggiungere questa funzione che fornisce il vecchio 1.2 callerFQCN modo di fare le cose (o quasi):
public void log(Class ignoreClassFQCN, Level level, Marker marker, String msg, Throwable throwable){
logger.logIfEnabled(ignoreClassFQCN.getName(), level, marker, msg, throwable);
}
Poi, dalle vostre esistenti classi log-avvolgimento, si può fare qualcosa di simile:
// inside ThisClass.java, denoting an old logger such as one that used log4j 1.2 with the callerFQCN parameter, or just an old logger that's naive and custom built.
private static final MyLog4j2WrapperClass newLogger = MyLog4j2WrapperClass.create();
public static void debug(String message) {
// basic example
newLogger.log(ThisClass.class, Level.DEBUG, null, message, null);
}
public static void logFailure(String message) {
// example of using a custom log level
newLogger.log(ThisClass.class, MyLog4j2WrapperClass.FAILURE, null, message, null);
}
mi è capitato di eliminare un gruppo di altre funzioni generate che non sto utilizzando, dal momento che avevo pianificato di realizzare un semplice shim per un sistema di registrazione mal progettato (personalizzato). Ho eliminato un sacco di metodi create() che non avevo intenzione di usare. Così qui è una classe operaia (le parti vale la pena condividere):
public final class MyLog4j2WrapperClass extends ExtendedLoggerWrapper {
private static final long serialVersionUID = 1L;
private final ExtendedLoggerWrapper logger;
private static final String FQCN = MyLog4j2WrapperClass.class.getName();
public static final Level FAILURE = Level.forName("FAILURE", 150);
public void log(Class ignoreClass, Level level, Marker marker, String msg, Throwable throwable){
logger.logIfEnabled(ignoreClass.getName(), level, marker, msg, throwable);
}
private MyLog4j2WrapperClass(final Logger logger) {
super((AbstractLogger) logger, logger.getName(), logger.getMessageFactory());
this.logger = this;
}
/**
* Returns a custom Logger with the name of the calling class.
*
* @return The custom Logger for the calling class.
*/
public static MyLog4j2WrapperClass create() {
final Logger wrapped = LogManager.getLogger();
return new MyLog4j2WrapperClass(wrapped);
}
Vorrei sottolineare che considero questo uno spessore - è qualcosa di farti da parte, ma vi consiglio vivamente di continuare ad allontanarsi dalla vecchia sistema di registrazione una volta che hai lo shim in atto. Ciò ti consentirà di eseguire più modifiche incrementali del codice senza dover eseguire immediatamente una migrazione completa.