Comment utiliser AsyncAppender dans log4j pour écrire un message de journal sur le service Web? Devrais-je créer mon propre Appender qui étendrait AsyncAppender ou juste attacher des appenders personnalisés à AsyncAppender? Si le second choix est correct, où dois-je prendre l'objet AsyncAppender? Y a-t-il un exemple?Comment utiliser AsyncAppender dans log4j?
Répondre
Répondre à ma propre question.
Dans le fichier de configuration log4j (habituellement c'est log4j.xml ou log4j.properties), nous devrions définir AsyncAppender qui se réfèrerait à un réel appender (il peut s'agir de notre propre classe définie comme dans mon cas). J'ai donc écrit une classe WebServiceAppender qui étend AppenderSkeleton et implémente 3 méthodes abstraites. La méthode principale est "append" qui se connecte au service Web et lui envoie toutes les informations. C'est tout.
Ajouter AsyncAppender dans le fichier de configuration log4j qui se référera à un réel appender. Pour démonstration: l'ajout asyncappender pour consoler appender dans log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss aa} %t [%l] %m%n"/>
</layout>
</appender>
<appender name="async" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="500"/>
<appender-ref ref="console"/>
</appender>
<root>
<priority value="all"></priority>
<appender-ref ref="async"/>
</root>
</log4j:configuration>
Pour des raisons de performances, il est préférable de toujours limiter la priorité racine à un niveau supérieur. Voir http://stackoverflow.com/a/13144054/603516. – Vadzim
Pouvez-vous fournir le même exemple mais dans le format de fichier log4j.properties? –
le numéro de ligne ne montrera pas – fudy
Nous voulions utiliser log4j.AsyncAppender mais n'a pas pu trouver aucune méthode setter pour fixer d'autres appenders au fichier log4j.property. Nous avons donc étendu la classe log4j.AsyncAppender et ajouté un setter pour ajouter d'autres appenders. Cela a permis au thread principal du programme d'être indépendant de l'opération de journalisation de log4j. Les détails ci-dessous.
entrée log4j:
Définir un enregistreur 'com.noPath' avec log4j fichier Appender, 'FileAppender'. Notez que le chemin de l'enregistreur est immatérielle et d'où le nom « com.noPath »
log4j.logger.com.noPath=DEBUG,fileAppender
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.File=c:/test.log
Définir l'enregistreur que les besoins d'affaires, « com.business », fixez le appender fichier de l'étape précédente, « FileAppender », au log4j AsyncAppender par un com.log.AsyncAppenderHelper de classe personnalisée qui étend log4j AsyncAppender
log4j.logger.com.business=DEBUG,asyncLog
log4j.appender.asyncLog=com.log.AsyncAppenderHelper
log4j.appender.asyncLog.appenderFromLogger=com.noPath
la classe java com.log.AsyncAppenderHelper extension log4j.AsyncAppender, ont disponible dans le chemin de la classe.
package com.log
import java.util.Enumeration;
import org.apache.log4j.Appender;
import org.apache.log4j.AsyncAppender;
import org.apache.log4j.Logger;
/*
* This class helps configure to AsyncAppender from log4j as part of log4j.properties
* You can inject other appenders to AsyncAppender using the AsyncAppenderHelper
* This would free up the main program thread to be independent of log4j's logging operation
* @Author http://www.linkedin.com/in/jobypgeorge
*/
public class AsyncAppenderHelper extends AsyncAppender{
public AsyncAppenderHelper(){
super();
}
public void setAppenderFromLogger(String name){
Logger l = Logger.getLogger(name);
Enumeration<Appender> e = l.getAllAppenders();
while(e.hasMoreElements()){
Appender a = e.nextElement();
this.addAppender(a);
System.out.println("The newAppender "+a.getName() +" attach status "+this.isAttached(a));
}
}
}
bel exemple comment utiliser async appender dans log4j.properties – hudi
Attention, cela peut facilement casser. J'ai essayé ceci mais le PropertyConfigurator enlève des appenders et les ajoute de nouveau pendant qu'il traite. Mon AsyncAppenderHelper s'est retrouvé avec un appender fermé. C'est pourquoi vous devez utiliser DomConfigurator (xml) pour l'utiliser. –
@AlanYackel il n'y a pas d'option comment l'utiliser avec log4j.properties? Je ne peux pas utiliser le fichier xml – hudi
- 1. Log4j AsyncAppender
- 2. Utiliser MaxBackupIndex dans DailyRollingFileAppender -log4j
- 3. Comment utiliser log4j dans le code?
- 4. Différence entre Asynclogger et AsyncAppender dans Log4j2
- 5. Que représente "BufferSize" dans un appender log4j?
- 6. Comment commencer à utiliser Chainsaw pour Log4j?
- 7. comment configurer jetty pour utiliser log4j?
- 8. Utilisation asynchrone appender avec appender JMS dans log4j
- 9. Comment utiliser log4j dans un module EJB avec WebLogic?
- 10. Log4j dans un environnement en cluster
- 11. eclipse link et log4j: comment utiliser les deux
- 12. comment utiliser log4j logger déclaré en Java côté d'un dll
- 13. Comment utiliser les FileAppenders de log4j de manière asynchrone?
- 14. Comment configurer Scala Breeze pour utiliser log4j ou slf4j
- 15. Comment envoyer java.util.logging à log4j?
- 16. consignation persistante dans log4j
- 17. Log4j FileNamePattern dans DailyRollingFileAppender
- 18. log4j dans un JTextPane
- 19. Log4j dans Grails
- 20. log4j
- 21. Comment désactiver le débogage log4j dans docx4j
- 22. Comment remplacer un fichier journal dans log4j?
- 23. comment modifier le htmllayout dans log4j
- 24. Comment configurer DBAppender avec log4j dans JBoss5?
- 25. Comment imprimer le préfixe personnalisé dans log4j
- 26. Comment obtenir des enregistreurs distincts dans log4j?
- 27. Comment désactiver log4j dans un fichier tiers?
- 28. Profondeur d'exception dans log4j
- 29. exception Log4j dans Grails
- 30. Log4j dans Lotus Domino
Veuillez fournir votre exemple de code pour d'autres utilisateurs. merci – philipp
pouvez-vous s'il vous plaît fournir le code ou quelques lignes? –