2011-01-07 36 views
6

Estoy intentando añadir la fecha actual al archivo log log4j. Por lo que sería algo como esto:Nombre de archivo con fecha en Log4j

myApp-2011-01-07.log

Lo que pasa es que yo no quiero usar la DailyRollingFileAppender. La razón es que habrá otra secuencia de comandos que se ejecutará diariamente que hará una copia de seguridad de todo en la carpeta de registros. Esto se ejecuta bajo Tomcat5.5.

¿Esto es posible en log4j?

+0

Lo sentimos, ¿así que no desea que pase a la nueva fecha? Entonces, ¿qué pasa a la medianoche? –

Respuesta

13

Creo que sólo podría establecer una propiedad del sistema de código para contener la fecha actual:

static{ 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    System.setProperty("current.date", dateFormat.format(new Date())); 
} 

A continuación, en el archivo de log4j.xml puede utilizar la propiedad del sistema cuando se especifica el nombre del archivo de registro en el appender :

<appender name="MYAPPENDER" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="${user.home}/myApp-${current.date}.log" /> 

ETA: Ahora que lo pienso puede que tenga que configurar la propiedad del sistema utilizando un inicializador estático para asegurarse de que la propiedad se establece antes de que se configura log4j.

+0

¿creará un nuevo archivo para una nueva fecha y día? o creará solo una vez? – Steve

+0

Ha pasado un tiempo desde que miré log4j, pero creo que el ejemplo que proporcioné crearía solo un archivo de registro para el día en que comenzó su proceso. Use un "RollingFileAppender" en su log4j.xml si desea un nuevo archivo de registro todos los días. – BenjaminLinus

+0

lo intentaré, gracias por responder .. – Steve

5

establecer esto en su archivo log4j.properties Probar:

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.File=example.log 

mucha más información se puede encontrar aquí http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html

+0

Entonces, si configuro mi registro para que gire a la medianoche, ¿qué ocurre con los archivos de registro anteriores? Cada archivo de registro tiene un sello de fecha de archivo, por lo que me preocupa tener archivos de registro que tendrán meses de antigüedad en el directorio. – Sun

9

puede gestionar esto de manera rápida y altamente mantainable con sólo la creación de su propia Appender de.

Basta con crear una clase como esta:

import java.text.SimpleDateFormat; 
    import java.util.Date; 
    import org.apache.log4j.FileAppender; 

    public class CustomFileAppender extends FileAppender{ 

    @Override 
    public void setFile(String fileName) 
    { 
     if (fileName.indexOf("%timestamp") >= 0) { 
      Date d = new Date(); 
      SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSS"); 
      fileName = fileName.replaceAll("%timestamp", format.format(d)); 
     } 
     super.setFile(fileName); 
    } 
} 

y colocar esto en sus propiedades:

log4j.appender.file=com.portima.filenet.brio.ops.tools.CustomFileAppender 
    log4j.appender.file.File=${log}/general.%timestamp.log 

Ahora usted puede dar cualquier tipo de nombre de archivo que desea.

Cuestiones relacionadas