Je commence actuellement une nouvelle Webapp (fonctionnant sur Tomcat 6) J'ai des composants qui utilisent slf4j et des composants qui utilisent la journalisation commune . Je prévois d'utiliser log4j 2.0 comme implémentation de journal appenders: SocketAppender et SyslogAppender mais également en raison du rechargement de configuration promu sans perte d'événements de journal)
Mes questions sont maintenant les suivantes: - À quelle interface dois-je programmer mes nouvelles classes? loag4j ou slf4j? ou même des communes se connectant?
Quel est le moyen préféré de déployer les pots? les mettre dans ma guerre d'application ou est-ce que je les mets dans les bibliothèques Tomcat?
de quels bocaux dois-je déployer? log4j (y compris les liaisons slf4j et commons), la journalisation des commons (slf4j-api-1.7.2.jar) et slf4j api (slf4j-api-1.7.2.jar)
A quelle interface est-ce que je programme mes nouvelles classes? loag4j ou slf4j?
Si vous souhaitez utiliser SLF4J, programmez-le à cette interface. Il offre la plus grande flexibilité pour la mise en œuvre de la journalisation sous-jacente. Le but de slf4j est d'être une interface sur laquelle vous pouvez programmer. Ainsi, à l'avenir, si vous décidez de basculer vers, par exemple, la consignation, vous n'aurez pas à réécrire votre code.
Quel est le moyen préféré de déployer les pots? les mettre dans ma guerre d'application ou est-ce que je les mets dans les bibliothèques Tomcat?
Mettez-les dans votre GUERRE.
La seule raison (imo) de placer les fichiers JAR dans le répertoire libs de Tomcat est s'ils doivent charger une bibliothèque native. Étant donné que Java ne vous permettra pas de charger la même bibliothèque native à partir de deux chargeurs de classe différents, vous devez les placer dans un emplacement commun. Mais cela ne s'applique pas ici.
Certaines personnes pensent que le répertoire lib est un moyen de gagner de la place. Cela était peut-être valable lorsque les ordinateurs de la "classe serveur" disposaient de 1 Go de RAM, mais ce n'est plus le cas. Et éviter lib
signifie que vous éviterez la plupart des problèmes de chargement de classes difficiles à déboguer.
de quels bocaux dois-je déployer?
Je suppose que vous avez déjà une configuration pour Log4J et/ou êtes à l'aise pour l'écrire. Si ce n'est pas le cas, et que tout ce qui vous intéresse, c'est du code qui utilise Log4J en interne, il y a log4j-over-slf4j
, qui interceptera les appels Log4J. Ensuite, vous devez choisir un framework, tel que Logback.
(Remarque: au départ, j'avais ajouté des liens vers tous ces packages, mais je n'ai pas assez de représentants pour les publier. Donc voici un lien unique vers le référentiel Maven avec tous les packages SLF4J mis en surbrillance)
J'utilise slf4j avec log4j2 et j'utilise
slf4j-api-1.7.12.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
log4j-slf4j-impl-2.2.jar
jcl-over-slf4j-1.7.12.jar(get rid of commons logging jars)
si votre serveur d'applications comporte des versions en conflit, vous devrez peut-être remplacer certains paramètres du chargeur de classe spécifiques au fournisseur.
par exemple. dans weblogic 12 c, je l’ai dans mon weblogic.xml dans src/main/webapp/WEB-INF
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
xmlns="http://xmlns.Oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd
http://xmlns.Oracle.com/weblogic/weblogic-web-app http://xmlns.Oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd">
<container-descriptor>
<prefer-application-packages>
<package-name>org.Apache.log4j.*</package-name>
<package-name>org.Apache.commons.logging.*</package-name>
<package-name>org.Apache.commons.lang.*</package-name>
<package-name>org.Apache.commons.io.*</package-name>
<package-name>org.Apache.commons.collections4.*</package-name>
<package-name>org.slf4j.*</package-name>
</prefer-application-packages>
</container-descriptor>
<jsp-descriptor>
<keepgenerated>true</keepgenerated>
<debug>true</debug>
</jsp-descriptor>
<context-root>/cnfg</context-root>
</weblogic-web-app>
Veuillez noter que je n’ai pas utilisé Log4J 2.0, bien que j’ai utilisé SLF4J avec Log4J 1.2. Cela étant dit, je répondrais à vos questions comme suit:
lib
du serveur d'applications. Sinon, elles affecteront toutes les applications Web sur ce serveur d'applications, pas seulement le vôtre. De plus, les fichiers JAR du répertoire lib
du serveur d'applications ne peuvent pas être contrôlés en déployant des applications Web, mais doivent être gérés manuellement.slf4j-api-1.7.2.jar
, log4j-to-slf4j-2.0-beta4.jar
, log4j-2.0-beta4.jar
et log4j-core-2.0-beta4.jar
, ainsi que de toutes dépendances. Je suis sûr que Maven apportera les dépendances requises si vous l'utilisez.