log4j ver 1.x:
Comme d'autres l'ont dit, log4j recherche le premier fichier de configuration dans le classpath. Voir: http://logging.apache.org/log4j/1.2/manual.html
Mais quand il y a des « log4j.xml » et les fichiers 'log4j.properties de dans le classpath, il semble que l'expérimentation log4j donne la priorité à « log4j.xml » sur « log4j.properties ». Par exemple, log4j semble d'abord rechercher dans le chemin de classe le premier fichier 'log4j.xml'. S'il n'y en a pas, alors log4j semble chercher dans le classpath le premier fichier 'log4j.properties'.
Copier et coller du code ci-dessous peut aider à déterminer quel fichier de configuration est utilisé:
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:
Le L'ordre de recherche pour le fichier de configuration par défaut est documenté ici: http://logging.apache.org/log4j/2.x/manual/configuration.html
c.-à-d. Pour log4j version 2.x, si aucun fichier de configuration à priorité supérieure n'est trouvé (par ex. log4j2-test. [propriétés | Yam | json | xml]), le fichier log4j2.properties est utilisé s'il se trouve dans le classpath. Notez que log4j2.xml a la priorité la plus basse et ne sera utilisé que si les fichiers de configuration log4j2 'properties', 'yaml' ou 'json' sont tous introuvables.
Remarque: Pour faciliter le débogage des problèmes de configuration de log4j, définissez la propriété 'log4j.debug', par ex. avec:
java -Dlog4j.debug ...
Voir aussi:How to initialize log4j properly?
J'ai une exigence spécifique Si je veux charger à la fois le fichier de propriétés comment puis-je achive il? Je veux dire que les fichiers log4j.properties de a.jar et de b.jar devraient être chargés ... Y at-il un moyen? – Gourabp
Pourquoi auriez-vous besoin de les charger tous les deux? L'objectif de l'externalisation de la configuration dans un fichier est de pouvoir configurer la journalisation comme vous le souhaitez. Les fichiers jar ne doivent donc même pas contenir un fichier log4j.xml.Au lieu de cela, ils doivent documenter les enregistreurs qu'ils utilisent (par convention, le nom du consignateur est le nom de la classe), puis l'assembleur de l'application, utilisant les deux fichiers jar, crée son propre fichier de configuration contenant la configuration de toutes les bibliothèques utilisées. application. –
Je veux charger les deux parce que je suis en train d'écrire une API client où je veux enregistrer les journaux spécifiques à l'API client dans un fichier séparé. l'application peut avoir sa propre configuration log4j mais je ne veux pas que le côté client change quoi que ce soit. Je vais juste leur donner l'api jar où l'appi spécifique à l'api et l'enregistreur seront définis. Notez également que je ne veux pas l'atteindre par programmation, je veux le faire par configuration. – Gourabp