Cómo utilizar AsyncAppender en log4j?
¿Cómo usar AsyncAppender en log4j para escribir un mensaje de registro en el servicio web? ¿Debería crear mi propio Appender que extendería AsyncAppender o simplemente adjuntar appenders personalizados al AsyncAppender? Si la segunda opción es correcta, ¿dónde debo llevar el objeto AsyncAppender? ¿Hay algún ejemplo?
3 answers
Agregue AsyncAppender en el archivo de configuración log4j que se referirá a un appender real. Para demostración: agregar asyncappender a 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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-31 16:58:20
Queríamos usar log4j.AsyncAppender pero no pudimos encontrar ningún método setter para adjuntar 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 al hilo principal del programa a ser independiente de la operación de registro de log4j. Los detalles a continuación.
Log4j entrada:
Define un logger 'com.noPath 'with log4j File Appender, 'FileAppender'. Tenga en cuenta que la ruta del registrador es inmaterial y, por lo tanto, el nombre 'com.noPath '
log4j.logger.com.noPath=DEBUG,fileAppender
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.File=c:/test.log
Defina el registrador que necesita el negocio, ' com.business', Adjunte el archivo appender del paso anterior, 'FileAppender', al log4j AsyncAppender a través de una clase personalizada com.registro.AsyncAppenderHelper que extiende log4j AsyncAppender
log4j.logger.com.business=DEBUG,asyncLog
log4j.appender.asyncLog=com.log.AsyncAppenderHelper
log4j.appender.asyncLog.appenderFromLogger=com.noPath
La clase java com.registro.AsyncAppenderHelper extendiendo log4j. AsyncAppender, tenerlo disponible en la ruta de la 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));
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-28 15:06:08
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 extiende AppenderSkeleton e implementa 3 métodos abstractos. El método principal es "append" que se conecta al servicio web y le envía toda la información. Eso es.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-20 11:55:51