Separar el log en varios ficheros

De ChuWiki

Separar el log en dos ficheros con log4j[editar]

Usando log4j puede pasarnos que queramos separar la salida de log en dos ficheros distintos, según de dónde venga el log. Por ejemplo, los logs de las clases del paquete chuidiang.prueba1 queremos que vayan a fichero1.log y los del paquete chuidiang.prueba2 a fichero2.log

Podemos hacerlo de la siguiente forma.

En el fichero log4j.properties ponemos dos appenders, uno por fichero

log4j.rootLogger=WARN

log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=c:/ficheroA.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=c:/ficheroB.log
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Ahora, en el mismo fichero, únicamente decimos donde queremos que vaya cada paquete. Para ello, añadimos estas dos líneas

log4j.logger.chuidiang.prueba1=DEBUG,A1
log4j.logger.chuidiang.prueba2=DEBUG,A2

donde decimos que las clases de chuidiang.prueba1 deben usar el appender A1 y que las clases de chuidiang.prueba2 deben usar el appender A2.

En el código, las clases deben obtener el logger con su .class, así

package chuidiang.prueba1;
public class Clase1
{
   private static final Logger log = Logger.getLogger(Clase1.class);
   ...
}

También es posible usar un identificador de texto cualquiera que nosotros queramos en vez de el .class. Por ejemplo, si queremos que todos los logs relativos a base de datos salgan a un fichero, independientemente de qué clase los lance, podemos hacer esto

En el log4j.properties

log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=c:/BaseDatos.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.logger.BaseDatos=DEBUG,A1

y luego, en el código java donde queramos algo que vaya a este fichero

package chuidiang.prueba1;
public class Clase1
{
   private static final Logger log = Logger.getLogger("BaseDatos");
   ...
}