2014-09-22 25 views
10

Ho l'importazione log4j-api-2.0.0.jar e log4j-core-2.0.2.jar nel mio percorso di compilazione. Ma in qualche modo il seguente codice erano falliscono:Metodo getLogger() non è più un membro di Logger in log4j2?

import org.apache.logging.log4j.core.Logger; 

public class TheClass { 

    private static Logger log = Logger.getLogger(TheClass.class); 

... 

E il messaggio di errore indica che:

The method getLogger(Class<TheClass>) is undefined for the type Logger

Sono solo così curiosa non è più getLogger() un metodo valido Logger?

risposta

17

Noterai che Logger non dichiara più tale metodo.

log4j versione 2 ha apportato alcune modifiche drastiche. Here's il registro delle modifiche. getLogger seems to have been moved to a LogManager class.

Here's come suggeriscono di effettuare la migrazione.

+2

E http://logging.apache.org/log4j/2.x/manual/migration.html potrebbe essere utile leggere anche. – nos

+0

@nos Grazie, aggiunto. –

+1

E troverai tutorial non più vecchi di un anno con guide per la vecchia versione. Bellissimo. – Traubenfuchs

1

Come osservato in altre risposte, Logger è ora un'interfaccia e si possono ottenere le istanze Logger dalla LogManager.

L'API è ora separata dall'implementazione, per dare al team la libertà di modificare l'implementazione senza infrangere il codice utente. L'API cambierà raramente e, se cambia, sarà in una versione 2.x, non in una versione 2.0.x. Detto questo, è probabilmente una buona idea usare sempre le corrispondenti versioni di log4j-api e log4j-core.

6

Sto dando un esempio per una migliore comprensione.

private static Logger logger; 
     static { 
      try { 
        // you need to do something like below instaed of Logger.getLogger(....); 
        logger = LogManager.getLogger(ResourceService.class); 
       } catch (Throwable th) { 
        throw new HRException("Cannot load the log property file", th); 
      } 
     } 
3

con il nuovo Log4J 2, è necessario aggiungere almeno (nel mio caso) log4j-core-2.8.2, log4j-api-2.8.2 e in qualche altro caso potrebbe essere necessario aggiungere anche log4j -Web-2.8.2. Quindi, quando si desidera ottenere una registrazione di importare import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;

e, infine, l'utilizzo sarà static final Logger LOGGER = LogManager.getLogger(WebService.class.getName());

Nota: non dimenticate di mettere il file di configurazione nella directory principale del progetto, altri saggi non sarà in grado di ottenere i tuoi registri.

Spero che questo vi aiuterà qualcuno Cordiali saluti