2009-07-23 12 views
12

Tengo varias instancias de una clase de subproceso que se ejecuta en un momento determinado. Tengo la configuración de log4j para ser utilizada para las necesidades de registro.¿Cómo configuro las propiedades de log4j para que cada subproceso genere su propio archivo de registro?

Necesito una forma de configurar log4j para que cada instancia de mi clase de subprocesos entregue su registro en un archivo de registro diferente.

Aquí es lo que he hecho (en pseudocódigo)

public class doSomething extends Thread { 

    private Logger d_logger; 

    public doSomething(int id){ 
     d_logger = Logger.getLogger("doSomething"+id); 
     String logFileName = "doSomething"+id+".log"; 

     Properties prop = new Properties; 
     prop.setProperty("doSomething"+id,"DEBUG, WORKLOG"); 
     prop.setProperty("log4j.appender.WORKLOG","org.apache.log4j.FileAppender"); 
     prop.setProperty("log4j.appender.WORKLOG.File", logFileName); 
     prop.setProperty("log4j.appender.WORKLOG.layout","org.apache.log4j.PatternLayout"); 
     prop.setProperty("log4j.appender.WORKLOG.layout.ConversionPattern","%d %c{1} - %m%n"); 
     prop.setProperty("log4j.appender.WORKLOG.Threshold","INFO"); 

     PropertyConfigurator.configure(prop); 
    } 

    public void run(){ 
     d_logger.info("Starting to doSomething number" + id); 
    } 

} 

A pesar de lo anterior crea un archivo para cada flujo de entrada instancias, sino que no hace nada de salida a esos archivos. Cualquier ayuda es muy apreciada.

Respuesta

13

No es nada dar salida a los archivos porque la sintaxis correcta para la creación de un registrador es:

prop.setProperty("log4j.logger.doSomething"+id,"DEBUG, WORKLOG"); 
+0

gracias! ¡Acabo de tener un momento de eh! :) –

+0

No funciona con log4j2, la clase PropertyConfigurator ya no es compatible. – Sanmoy

Cuestiones relacionadas