¿Cómo se usa AsyncAppender en log4j para escribir un mensaje de registro en el servicio web? ¿Debo crear mi propio Appender que extienda AsyncAppender o simplemente adjunte appenders personalizados al AsyncAppender? Si la segunda opción es correcta, ¿dónde debería tomar el objeto AsyncAppender? ¿Hay algún ejemplo?Cómo utilizar AsyncAppender en log4j?
Respuesta
Respondiendo a mi propia pregunta.
En el archivo de configuración log4j (generalmente es log4j.xml o log4j.properties) deberíamos definir AsyncAppender que se referiría a un appender real (puede ser nuestra propia clase definida como en mi caso).
Así que escribí una clase WebServiceAppender que amplía AppenderSkeleton e implementa 3 métodos abstractos. El método principal es "agregar" que se conecta al servicio web y le envía toda la información. Eso es.
Agregue AsyncAppender en el archivo de configuración log4j que se referirá a un appender real. Para demo: asyncappender añadiendo a la consola appender en 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>
Queríamos utilizar log4j.AsyncAppender pero no se han encontrado métodos setter para unir otros appenders en el archivo log4j.property. Así que extendimos la clase log4j.AsyncAppender y agregamos un setter para agregar otros appenders. Esto ha ayudado a que el hilo del programa principal sea independiente de la operación de registro de log4j. Los detalles a continuación.
entrada log4j:
definir un 'com.noPath' registrador con log4j Archivo Appender de, 'FileAppender'. Tenga en cuenta que el camino registrador es inmaterial y de ahí el nombre 'com.noPath'
log4j.logger.com.noPath=DEBUG,fileAppender
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.File=c:/test.log
Definir el registrador que las necesidades de negocio, 'com.business', conecte el archivo de appender paso anterior, 'FileAppender', a la log4j AsyncAppender a través de un com.log.AsyncAppenderHelper clase personalizada que se extiende log4j AsyncAppender
log4j.logger.com.business=DEBUG,asyncLog
log4j.appender.asyncLog=com.log.AsyncAppenderHelper
log4j.appender.asyncLog.appenderFromLogger=com.noPath
el com.log.AsyncAppenderHelper clase Java que se extiende log4j.AsyncAppender, lo tiene disponible en la ruta de clase.
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));
}
}
}
buen ejemplo de cómo usar el appender asincrónico en log4j.properties – hudi
Cuidado, esto puede romperse fácilmente. Intenté esto pero el PropertyConfigurator quita los appenders y los vuelve a agregar mientras que procesa. Mi AsyncAppenderHelper terminó con un appender cerrado. Es por eso que necesita usar DomConfigurator (xml) para usarlo. –
@AlanYackel no hay opción de cómo usarlo con log4j.properties? No puedo usar el archivo xml – hudi
- 1. En Log4J, ¿por qué% C en ConversionPattern imprime '?' (signo de interrogación) con AsyncAppender?
- 2. Cómo habilitar Logger.debug() en Log4j
- 3. log4j: ¿Cómo usar SocketAppender?
- 4. ¿Cómo implementar/usar log4j?
- 5. Cómo usar log4j en eclipse rcp
- 6. cómo cambiar el htmllayout en log4j
- 7. ¿Cómo obtener madereros distintos en log4j?
- 8. log4j soporte en Android
- 9. configuración log4j en EAR
- 10. Cómo enviar java.util.logging a log4j?
- 11. archivo de propiedades log4j: cómo configurar?
- 12. ¿Cómo comenzar a usar Motosierra para Log4j?
- 13. Deshabilitar Log4J Salida en Java
- 14. log4j alineación
- 15. Utilice MaxBackupIndex en DailyRollingFileAppender -log4j
- 16. migrando un proyecto de log4j a slf4j + log4j
- 17. log4j stackoverflow
- 18. log4j postgres en Java EE
- 19. Comparar log4j y Logger
- 20. log4j múltiples niveles en múltiples appenders
- 21. Usando FileNamePattern, RollingFileAppender en log4j
- 22. Profundidad de excepción en log4j
- 23. Log4j en JUnit Test case
- 24. ¿Logback admite log4j appenders?
- 25. ¿Cómo configuro log4j logging para un jar?
- 26. ¿Cómo se vacía un archivo log4j FileAppender?
- 27. cómo usar log4j con múltiples clases?
- 28. eclipse link y log4j: cómo usar ambos
- 29. Dónde/cómo busca log4j un archivo log4j.properties?
- 30. Log4j y syslogappender
Por favor, proporcione su código de ejemplo para otros usuarios. gracias – philipp
¿puede por favor proporcionar el código o algunas líneas? –