2012-11-05 12 views
23

Desidero utilizzare il nuovo Log4J 2 - Java Logging Framework. Tutto funziona bene, ma ho provato da un'ora a caricare un file di configurazione personalizzato per configurare la registrazione (come il livello di registro).Utilizzo di un file XML (log4j2.xml) per configurare Log4j 2

Questo è il mio log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="OFF"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    </appenders> 
    <loggers> 
    <root level="error"> 
     <appender-ref ref="Console"/> 
    </root> 
    </loggers> 
</configuration> 

ho provato quanto segue, ma non funziona nulla:

  • spostare il file log4j2.xml quindi è situato nel pacchetto di default.
  • spostare il file log4j2.xml in qualsiasi parte del progetto di
  • Nome del file log4j2.xml come "log4j.xml"
  • Creare una cartella nel progetto, posizionare il file log4j2.xml lì e aggiungere quella cartella per DURATA classpath

Dal momento che il official website non mi può aiutare, spero che tu possa aiutarmi a Log4j 2 lavorare con il mio file di configurazione.

+1

Ti dispiacerebbe fornendo un feedback sulla mia risposta commentando? È stato di aiuto o non vedi ancora i messaggi di registro per livelli diversi da ERRORE? – Andrey

risposta

30

Importante: Assicurarsi che il nome del file di configurazione è log4j2.xml (notare il 2 prima del periodo) in contrapposizione a log4j.xml

La mia ipotesi è nulla succede perché nulla viene registrato con il livello di errore. Si consiglia di provare ad aggiungere un altro logger in questo modo:

<logger name="com.foo.Bar" level="trace"> 
    <appender-ref ref="Console"/> 
</logger> 

Sembra che la sezione Configuration potrebbe essere una buona risorsa.

di elaborare ulteriormente, si sta specificando un registratore con il livello impostato su "errore":

<root level="error"> 
    <appender-ref ref="Console"/> 
</root> 

Questo significa che solo i messaggi registrati utilizzando Level.ERROR apparirà nel registro. L'aggiunta di un logger con un livello meno restrittivo consentirà la visualizzazione di altri messaggi nel registro. Consiglio di dare un'occhiata alla sezione Architecture del manuale (se scorri verso il basso nella pagina vedrai la tabella che spiega i livelli di registrazione). In alternativa, si può solo cambiare il livello del logger principale per rintracciare (invece di aggiungere un nuovo logger)

data la configurazione specificata, eseguendo il codice qui sotto rendimenti qualcosa come 13:27:50.244 [main] ERROR com.example.Log4j2Tester - testing ERROR level

package com.example; 

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

public class Log4j2Tester { 
    private static final Logger LOG = LogManager.getLogger(Log4j2Tester.class); 

    public static void main(String[] args) { 
     LOG.error("testing ERROR level"); 

//if you change the level of root logger to 'trace' 
//then you'll also see something like 
// 13:27:50.244 [main] TRACE com.example.Log4j2Tester - exiting application 
     LOG.trace("exiting application"); 
    } 
} 
+0

Everthing ora funziona bene. Grazie per la risposta dettagliata :) – Rubberducker

+0

@FentonCrackshell: felice di aiutare! – Andrey

+0

Dove mettere il 'log4j2.xml' alla fine? –

-4

Mettere il LOG4J2.XML nella cartella radice del progetto src/main.

+1

/bin è corretto – Blub

1

I miei 2 centesimi: Sistema

Software: log4j 2, NetBeans e TestNG.

Ho avuto lo stesso problema, ma con l'ambiente di test.

In base all'impostazione predefinita (ovvero, nel file log4j2.xml ubicato in src /) il livello di registrazione è impostato su errore. Ma quando eseguo i test, voglio che il log sia tracciato. E, naturalmente, registrato su un file più o meno hardcoded.

Cioè, inizialmente ho fatto qualcosa di simile:

public class someTestClass { 
     static final Logger log=LogManager.getLogger("test.someTestClass"); 
...... 
@Test 
public void SomeMethod(){ 

System.setProperty("log4j.configurationFile", "resources/log4j2_conf.xml"); 

log.trace("This will not show because the default logging level is ERROR 
and the resources/log4j2_conf.xml is not loaded"); 

} 

Il problema è che per il momento verrà eseguita l'istruzione System.setProperty, il log4j sarà già impostato (Cioè, la finale statica log logger = ... sarà eseguito prima)

Quello che ho fatto, è usare le @BeforeClass in questo modo:.

public class someTestClass { 
    Logger log;  
    @BeforeClass 
    public void setLogger(){ 
     SetEnv.SetEnvironment(); 
     log = LogManager.getLogger("TestRealClientRealServer"); 
    } 
...... 
    @Test 
    public void SomeMethod(){ 

     log.trace("This will show, because in log4j2_conf.xml 
the root level is set to TRACE"); 

    } 
} 

BTW, risorse/possono essere messi in pacchetti di test in modo da d non spedire l'installazione "test" log4j.

Speranza che aiuta

1

Oltre ad utilizzare il file di configurazione di default, log4j2.xml (o log4j2-Test.xml) nella cartella principale percorso di classe, è possibile utilizzare questa proprietà di sistema per specificare il percorso del file di configurazione (utilizzare il -D nella riga di comando java)

log4j.configurationFile='xxxx/xxx/xxx' 
0

Un consiglio per gli utenti di Eclipse:

Fare clic destro sul progetto e fare clic "refresh". Assicurati di poter vedere il file log4j2.xml in eclissi.

risposta completa qui: log4j 2 - configuration issue

2

SUGGERIMENTO: Per utilizzare i file log4j personalizzati. (Piuttosto predefinito "log4j2.xml" thingie). Potrebbe essere utile avere più configurazioni in alcuni casi.

Solo nel caso se uno utilizza Maven e si desidera configurarlo log4j2, ecco cosa avete bisogno nel vostro pom.xml:

   <systemProperties> 
        <property> 
         <name>/log4j.configuration</name> 
         <value>.../../Foo-log4j.xml</value> 
        </property> 
       </systemProperties> 

Per impostazione predefinita, "log4j2.xml" è il nome del file previsto. Tuttavia, possiamo sovrascriverlo impostando la proprietà di sistema log4j.configuration. Nell'esempio precedente, ho usato il file di configurazione personalizzato come "Foo-log4j.xml".

Si può fare lo stesso tramite CLI:

-Dlog4j.configuration="Foo-log4j.xml" 
+0

Ciao, avrei bisogno di ulteriori informazioni su questo, ho aggiunto la configurazione come suggerito ma non funziona ancora –

+0

Qual è il problema? –

Problemi correlati