Cómo utilizar AsyncAppender en log4j para escribir mensaje de registro para el servicio web? Debo crear mi propio Appender que se extendería AsyncAppender o simplemente conecte personalizado appenders a la AsyncAppender? Si la segunda opción es la correcta, donde debo tomar el AsyncAppender objeto? ¿Hay algún ejemplo?

InformationsquelleAutor Sergey | 2012-06-20

3 Comentarios

  1. 41

    Agregar AsyncAppender en log4j archivo de configuración que se refieren a un real appender.
    Para la demostración: la adición de asyncappender de la consola de 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>
    • Por motivos de rendimiento es mejor restringir raíz prioridad a un nivel superior. Consulte stackoverflow.com/a/13144054/603516.
    • Puede proporcionar el mismo ejemplo pero en log4j.propiedades de formato de archivo ?
    • el número de línea no se muestran
    • AsyncAppender sólo se puede configurar mediante el DOMConfigurator, entonces usted no puede usar el .propiedades de formato.
  2. 9

    Queríamos usar log4j.AsyncAppender, pero no pudo encontrar ningún métodos setter para adjuntar otros appenders en el log4j.archivo de propiedades. Así que hemos ampliado el log4j.AsyncAppender clase y se añade un setter para añadir otras appenders. Esto ha contribuido a que el programa principal hilo para ser independiente de log4j la operación de registro. Los detalles a continuación.

    log4j entrada:

    Definir un registrador de ‘com.noPath’ con el Archivo log4j Appender, ‘fileAppender’. Tenga en cuenta que el registrador de la ruta es inmaterial y de ahí el nombre de ‘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.negocio, Adjuntar el Archivo adicionador de paso anterior, ‘fileAppender’, a la log4j AsyncAppender a través de una clase personalizada com.registro.AsyncAppenderHelper que se extiende log4j AsyncAppender

    log4j.logger.com.business=DEBUG,asyncLog
    log4j.appender.asyncLog=com.log.AsyncAppenderHelper
    log4j.appender.asyncLog.appenderFromLogger=com.noPath
    

    La clase de java com.registro.AsyncAppenderHelper la ampliación de log4j.AsyncAppender, lo tienen 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 el uso de async appender en log4j.propiedades
    • Cuidado, esto puede romper fácilmente. He probado esto, pero la PropertyConfigurator quita appenders y re-añade como los procesos de ti. Mi AsyncAppenderHelper terminó con un cerrado appender. Esta es la razón por la que usted necesita para utilizar el DomConfigurator (xml) para usarlo.
    • no hay ninguna opción de cómo usarlo con log4j.propiedades ? No puedo utilizar archivo xml
  3. -6

    Responder a mi propia pregunta.

    En el archivo de configuración de log4j(por lo general es log4j.xml o log4j.propiedades) debemos definir AsyncAppender que haría referencia a un real appender(puede ser nuestra propia clase definida como en mi caso).

    Así que escribí un WebServiceAppender clase que extiende AppenderSkeleton e implementa 3 métodos abstractos. El método principal es «añadir» que se conecta a la web de servicio y envía toda la información a él. Eso es todo.

    • por favor, proporcione su código de ejemplo para otros usuarios. gracias
    • puede usted por favor proporcione el código o pocas líneas?

Dejar respuesta

Please enter your comment!
Please enter your name here