log4j ver 1.x:
Wie andere gesagt haben, sieht log4j für die erste Konfigurationsdatei im Classpath. Siehe: http://logging.apache.org/log4j/1.2/manual.html
Aber wenn beide ‚log4j.xml‘ und ‚log4j.properties‘ Dateien im Classpath, so scheint es aus Experimenten, dass log4j Vorrang zu ‚log4j.xml‘ über ‚log4j.properties‘ gibt.
. Erstens scheint log4j im Klassenpfad nach der ersten 'log4j.xml' Datei zu suchen. Wenn es keine gibt, dann scheint log4j dann im Klassenpfad nach der ersten 'log4j.properties'-Datei zu suchen.
Das Kopieren und Einfügen von dem folgenden Code kann helfen, zu bestimmen, welche Konfigurationsdatei verwendet wird:
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:
Die Die Suchreihenfolge für die Standardkonfigurationsdatei ist hier dokumentiert: http://logging.apache.org/log4j/2.x/manual/configuration.html
, d. H. Für log4j Version 2.x, wenn keine Konfigurationsdatei mit höherer Priorität gefunden wird (z. log4j2-test. [Eigenschaften | Yaml | json | xml]) dann wird die Datei log4j2.properties verwendet, wenn sie im Klassenpfad gefunden wird. Beachten Sie, dass log4j2.xml die niedrigste Priorität hat und nur verwendet wird, wenn die Konfigurationsdateien log4j2 'properties', 'yaml' oder 'json' nicht gefunden werden.
Hinweis: Um das Debugging von log4j-Konfigurationsproblemen zu erleichtern, legen Sie die Eigenschaft 'log4j.debug' fest, z. mit:
java -Dlog4j.debug ...
Siehe auch:How to initialize log4j properly?
Ich habe eine spezifische Anforderung Wenn ich laden möchten sowohl die Properties-Datei, wie kann ich es achive? Ich meine log4j.properties Dateien von a.jar und b.jar sollten geladen werden ... Gibt es eine Möglichkeit ?? – Gourabp
Warum sollten Sie beide laden? Das Ziel der Externalisierung der Konfiguration in eine Datei besteht darin, die Protokollierung so zu konfigurieren, wie Sie es möchten. Daher sollten die JAR-Dateien nicht einmal mit einer gebündelten log4j.xml-Datei geliefert werden.Stattdessen sollten sie dokumentieren, welche Logger sie verwenden (per Konvention ist der Loggername der Klassenname), und dann erstellt der Application Assembler unter Verwendung beider JAR-Dateien eine eigene Konfigurationsdatei, die die Konfiguration für alle in der Bibliothek verwendeten Bibliotheken enthält Anwendung. –
Ich möchte beide laden, weil ich eine Client-API schreibe, wo ich die Client-API-Protokolle in eine separate Datei protokollieren möchte. Die App kann ihre eigene log4j-Konfiguration haben, aber ich möchte nicht, dass die Client-Seite etwas ändert. Ich gebe ihnen einfach das Api-Glas, in dem der API-spezifische Appender und Logger definiert wird. Beachten Sie auch, dass ich es nicht programmatisch erreichen möchte, sondern durch Konfiguration. – Gourabp