log4j ver 1.x:
Come altri hanno detto, log4j cerca il primo file di configurazione nel classpath. Vedere: http://logging.apache.org/log4j/1.2/manual.html
Ma quando ci sono sia 'log4j.xml' e file 'log4j.properties' nel classpath, sembra dalla sperimentazione che log4j dà la precedenza a 'log4j.xml' over 'log4j.properties'.
Ad esempio, log4j sembra cercare nel classpath il primo file 'log4j.xml'. Se non ce n'è, quindi log4j sembra cercare nel classpath il primo file 'log4j.properties'.
Copiare e incollare dal codice di seguito possono aiutare a determinare quali file di configurazione viene utilizzato:
import org.apache.log4j.Logger;
public class TestLog4j
{
static
{
System.out.println("Classpath: [" + System.getProperty("java.class.path") + "]");
System.out.println("Found logging configuration files:");
System.out.println(" log4j.xml: " + Logger.getRootLogger().getClass().getResource("/log4j.xml"));
System.out.println(" log4j.properties: " + Logger.getRootLogger().getClass().getResource("/log4j.properties"));
}
public static void main(String[] args)
{
System.out.println("main():");
}
}
Edit:
log4j ver 2.x:
Il l'ordine di ricerca per il file di configurazione predefinito è documentato qui: http://logging.apache.org/log4j/2.x/manual/configuration.html
, ad esempio per la versione 2.x di log4j, se non viene trovato alcun file di configurazione di precedenza più elevato (ad es. log4j2-test. [proprietà | yaml | json | xml]) quindi viene utilizzato il file log4j2.properties se trovato nel classpath. Si noti che log4j2.xml ha la precedenza più bassa e verrà utilizzato solo se i file di configurazione 'properties', 'yaml' o 'json' di log4j2 non sono stati trovati.
Nota: Per facilitare il debug dei problemi di configurazione di log4j, impostare la proprietà 'log4j.debug', ad es. con:
java -Dlog4j.debug ...
Vedi anche:How to initialize log4j properly?
fonte
2014-10-15 20:24:53
Ho un requisito specifico Se voglio caricare sia il file delle proprietà come posso achive esso? Voglio dire che i file log4j.properties da entrambi a.jar e b.jar devono essere caricati ... Esiste un modo ?? – Gourabp
Perché dovresti caricarli entrambi? L'obiettivo di esternalizzare la configurazione in un file è poter configurare la registrazione nel modo desiderato. Quindi i file jar non dovrebbero nemmeno avere un file log4j.xml in bundle.Invece, dovrebbero documentare quali logger usano (per convenzione, il nome del logger è il nome della classe), e quindi l'assemblatore di applicazioni, usando entrambi i file jar, creerebbe il proprio file di configurazione, contenente la configurazione per tutte le librerie usate nel applicazione. –
Voglio caricarli entrambi perché sto scrivendo un'API client in cui voglio registrare i log specifici dell'API del client in un file separato. l'app può avere la propria configurazione di log4j ma non voglio che il client modifichi qualcosa. Darò loro solo il barattolo API in cui verranno definiti l'appender e il logger specifici per apice. Nota anche che non voglio raggiungerlo programmaticamente. Voglio farlo per configurazione. – Gourabp