web-dev-qa-db-fra.com

Où placer log4j.xml

Comment pouvons-nous spécifier où log4j doit regarder lors de la recherche de son fichier de configuration xml?

Il semble que par défaut, log4j regarde dans la racine d'un dossier de classe, je peux dire qu'en utilisant la fonctionnalité de débogage log4j et en exécutant mon application à partir de l'IDE.

Cependant, je n'ai plus de dossier de classe dans mon bocal. Et le fichier log4j.xml est à la racine du pot.

J'ai déjà essayé de définir l'option -Dlog4j.configuration = log4j.xml mais cela ne fonctionne pas.

Voici la structure globale de mon application en ce moment:

  • com
  • lib
  • méta-inf
  • log4j.xml
36
Farid

Il trouve le log4j.xml à l'aide du CLASSPATH. Si log4j ne trouve aucun fichier de configuration, il enverra une erreur à la console. Si vous ne voyez pas une telle erreur, il est probable qu'il trouve un fichier de configuration qui n'est peut-être pas celui que vous modifiez. Il existe une option de ligne de commande pour forcer Log4J à signaler le chemin du fichier de configuration qu'il utilise.

De http://wiki.Apache.org/logging-log4j/Log4jConfigurationHelp

Si vous exécutez avec "-Dlog4j.debug", log4j imprimera des informations sur la sortie standard indiquant comment il essaie de se configurer. La recherche vous indiquera où il recherche le fichier de configuration.

34
Kelly S. French

Supposons que votre configuration log4j se trouve en dehors de l'arborescence source. S'il ne trouve pas votre fichier de configuration, aidez-le avec:

-Dlog4j.configuration=file:///your/path/log4j.xml

Notez le qualificatif fichier: ///. Cela ne fonctionnera pas sans.

20
rwst

Je n'ai aucune erreur

Donc log4j trouve votre configuration, sinon vous obtiendriez:

log4j: WARN Aucun appender n'a été trouvé pour logger ().
log4j: AVERTISSEMENT Veuillez initialiser correctement le système log4j.

Également:

Le journal est juste imprimé sur la console

Cela signifie donc que vous devez probablement définir un appender de fichier, comme FileAppender ou RollingFileAppender . La section "Configuration" sur la courte introduction a quelques exemples.

5
Mornedhel

Vous pouvez utiliser:

DOMConfigurator.configure(log4jConfigurationFilename);

et spécifiez l'emplacement s'il est différent de la racine!

3
AMKhan

C'est peut-être une très vieille question, mais pour moi, la réponse était ici https://logging.Apache.org/log4j/2.x/manual/configuration.html

Selon le lien ci-dessus, recherche de journaux Apache dans classpath pour les fichiers log4j2.xml dans un ordre spécifique comme ci-dessous

  1. Log4j inspectera la propriété système "log4j.configurationFile" et, s'il est défini, tentera de charger la configuration à l'aide de ConfigurationFactory qui correspond à l'extension de fichier.
  2. Si aucune propriété système n'est définie, les propriétés ConfigurationFactory rechercheront log4j2-test.properties dans le chemin de classe.
  3. Si aucun fichier de ce type n'est trouvé, YAML ConfigurationFactory recherchera log4j2-test.yaml ou log4j2-test.yml dans le chemin de classe.
  4. Si aucun fichier de ce type n'est trouvé, JSON ConfigurationFactory recherchera log4j2-test.json ou log4j2-test.jsn dans le chemin de classe. Si aucun fichier de ce type n'est trouvé, XML ConfigurationFactory recherchera log4j2-test.xml dans le chemin de classe.
  5. Si un fichier de test est introuvable, les propriétés ConfigurationFactory rechercheront log4j2.properties sur le chemin de classe.
  6. Si un fichier de propriétés est introuvable, YAML ConfigurationFactory recherchera log4j2.yaml ou log4j2.yml sur le chemin de classe.
  7. Si un fichier YAML est introuvable, JSON ConfigurationFactory recherchera log4j2.json ou log4j2.jsn sur le chemin de classe.
  8. Si un fichier JSON est introuvable, XML ConfigurationFactory essaiera de localiser log4j2.xml sur le chemin de classe.
  9. Si aucun fichier de configuration n'a pu être localisé, la configuration par défaut sera utilisée. Cela entraînera la sortie de la journalisation sur la console.
2