Je dois manquer quelque chose mais je regarde cela depuis quelques jours maintenant, mais pourquoi diable utiliseriez-vous jamais log4j2 sur log4j (autre que la performance)?
D'après ce que j'ai vu jusqu'à présent, log4j2 est annoncé comme plus simple à configurer, mais c'est en fait beaucoup plus compliqué (cela fait trois jours maintenant et je n'arrive toujours pas à écrire un journal dans mon répertoire personnel). La configuration automatique ne fonctionne tout simplement pas pour moi (ou du moins je ne peux pas le faire fonctionner), le fichier de configuration lui-même est beaucoup plus complexe dans sa structure et semble être beaucoup plus difficile à ajouter au moment de l'exécution pour aider à diagnostiquer.
Donc, outre les performances, y a-t-il une raison d'utiliser log4j2 par rapport à log4j d'origine?
Raisons de la mise à niveau de Log4j 1.x vers Log4j 2
Soyez conscient
log4j-1.2-api
adaptateur mais les personnalisations qui s'appuient sur les éléments internes de Log4j 1.2 peuvent ne pas fonctionner.Conseils lors de la mise à niveau
Problèmes courants rencontrés par les utilisateurs lors du démarrage de log4j2:
log4j.configurationFile
propriété système<Configuration status="trace">
au début de votre fichier de configurationSi votre problème n'est pas l'un des précédents, veuillez montrer votre configuration et fournir plus de détails sur le problème que vous rencontrez. (Vous ne savez pas ce que vous attendez de la configuration automatique, il s'agit d'une fonction très basique qui enregistre les événements ERREUR dans la console si log4j2 ne trouve pas de fichier de configuration. Cela sera rarement suffisant.)
Pour écrire dans votre répertoire personnel, vous pouvez utiliser la propriété système recherche${sys:PROPERTYNAME}
. Voici un exemple de configuration à démontrer:
<Configuration status="trace">
<Properties>
<Property name="logfile">${sys:user.home}/log${date:yyyyMMdd}.log</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
<File name="FILE" fileName="${sys:logfile}">
<PatternLayout>
<pattern>%d %p [%t] %c{1.} %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="STDOUT" level="ERROR" />
<AppenderRef ref="FILE" />
</Root>
</Loggers>
</Configuration>
Vérifiez ceci . En bref, à partir du lien:
Log4j 2.0 présente:
un nouveau système de plugin
prise en charge des propriétés
prise en charge de la configuration basée sur JSON et rechargement automatique de sa configuration.
Prise en charge de nombreux cadres de journalisation existants, notamment SLF4J, Commons Logging, Apache Flume et Log4j 1.x, et fournit une nouvelle API de programmeur.
Comme vous l'avez dit, c'est aussi beaucoup plus rapide.
Les inconvénients sont:
log4j 2.0 est très différent de log4j 1.x et l'API est généralement incompatible.
Difficile à mettre en place.
Si vous n'avez besoin d'aucune des nouvelles fonctionnalités, vous êtes probablement d'accord avec l'ancien Log4j 1.x.