Dove configuro log4j in una classe di test JUnit?


85

Guardando l'ultimo caso di test JUnit che ho scritto, ho chiamato il metodo BasicConfigurator.configure () di log4j all'interno del costruttore della classe. Ha funzionato bene per eseguire solo quella singola classe dal comando "run as JUnit test case" di Eclipse. Ma mi rendo conto che non è corretto: sono abbastanza sicuro che la nostra suite di test principale esegue tutte queste classi da un processo, e quindi la configurazione di log4j dovrebbe avvenire più in alto da qualche parte.

Ma ho ancora bisogno di eseguire un test case da solo alcune volte, nel qual caso voglio che log4j sia configurato. Dove devo mettere la chiamata di configurazione in modo che venga eseguita quando il test case viene eseguito in modo autonomo, ma non quando il test case viene eseguito come parte di una suite più grande?


Risposte:


51

La LogManagerclasse determina quale configurazione log4j utilizzare in un blocco statico che viene eseguito quando la classe viene caricata. Sono disponibili tre opzioni destinate agli utenti finali:

  1. Se specifichi log4j.defaultInitOverridefalse, non configurerà affatto log4j.
  2. Specificare manualmente il percorso del file di configurazione e sovrascrivere la ricerca del percorso di classe. È possibile specificare la posizione del file di configurazione direttamente utilizzando il seguente argomento per java:

    -Dlog4j.configuration=<path to properties file>

    nella configurazione del test runner.

  3. Consenti a log4j di scansionare il classpath per un file di configurazione log4j durante il test. (il predefinito)

Vedere anche la documentazione in linea .


Come farà a sapere che è un "file di configurazione log4j?" Qual è il nome del file? (log4j.xml?)
Ciad

1
@Chad: ho modificato la mia risposta per rispondere alla tua domanda. Vedere il collegamento al blocco statico per vedere esattamente come viene implementato.
Paul Morie

Sto usando log4j2 e ho dovuto usare la seguente impostazione per indicare un file: -Dlog4j.configurationFile=log4j2.xml. Inoltre, se si sta cercando di eseguire il debug di carico / avvio, questa impostazione può essere utile: -Dlog4j2.debug=true.
Kent

Qualche modo per essere un po 'più specifico su questa risposta?
markthegrea

61

Generalmente metto un file log4j.xml in src / test / resources e lascio che log4j lo trovi da solo: nessun codice richiesto, l'inizializzazione di log4j predefinita lo raccoglierà. (In genere voglio comunque impostare i miei logger su "DEBUG")


6
Per i test di costruzione standard, impostare Log4j su avviso o addirittura errore. Se i test hanno esito positivo (anche i test negativi) non dovrebbe esserci alcuna registrazione, il che attira l'attenzione degli utenti.
keiki

2
Sì, è giusto per log4j 1.x. Per log4j2 a quanto pare è possibile utilizzare più file "esotiche" come il file di log4j2-test.properties ... logging.apache.org/log4j/2.x/manual/configuration.html :)
rogerdpack


5

Uso le proprietà di sistema in log4j.xml:

...
<param name="File" value="${catalina.home}/logs/root.log"/>
...

e inizia i test con:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <systemProperties>
            <property>
                <name>catalina.home</name>
                <value>${project.build.directory}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.