example configurar log4j appender

configurar - log4j2 json configuration example



¿Cómo usar AsyncAppender en log4j? (3)

¿Cómo usar 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 debo tomar el objeto AsyncAppender? ¿Hay algún ejemplo?


Agregue AsyncAppender en el archivo de configuración log4j que se referirá a un appender real. Para la demostración: agregar asyncappender 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 usar log4j.AsyncAppender pero no pudimos encontrar ningún método de establecimiento para adjuntar a otros agregadores en el archivo log4j.property. Así que extendimos la clase log4j.AsyncAppender y agregamos un setter para agregar otros agregadores. Esto ha ayudado a que el hilo principal del programa sea independiente de la operación de registro de log4j. Los detalles a continuación.

entrada log4j:

Defina un registrador ''com.noPath'' con log4j File Appender, ''fileAppender''. Tenga en cuenta que la ruta del registrador es irrelevante 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

Defina el registrador que necesita el negocio, ''com.business'', adjunte el archivo appender del paso anterior, ''fileAppender'', al log4j AsyncAppender mediante una clase personalizada com.log.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.log.AsyncAppenderHelper que extiende log4j.AsyncAppender, la tiene disponible en la ruta de clases.

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)); } } }


Respondiendo a mi propia pregunta.

En el archivo de configuración log4j (generalmente es log4j.xml o log4j.properties) debemos 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 "agregar", que se conecta al servicio web y le envía toda la información. Eso es.