2009-08-24 25 views
48

¿Puede alguien guiarme sobre cómo puedo configurar log4j para que inicie sesión en un archivo específico que especifique en tiempo de ejecución? El nombre y la ruta del archivo de registro se generan al ejecutar tiempo y la aplicación debe iniciar sesión en ese archivo en particular.configure log4j para iniciar sesión en el archivo personalizado durante el tiempo de ejecución

Generalmente, las entradas de los archivos adjuntos en el archivo log4j.properties apuntan al archivo de registro que utilizará la aplicación. Sin embargo, en este caso me gustaría leer la ruta del archivo de registro desde la línea de comando y registrarla .

¿Cómo puedo lograrlo?

Respuesta

52

Adaptado de la documentación log4j:

import org.apache.log4j.Level; 
import org.apache.log4j.Logger; 
import org.apache.log4j.SimpleLayout; 
import org.apache.log4j.FileAppender; 

public class SimpandFile { 
    static Logger logger = Logger.getLogger(SimpandFile.class); 
    public static void main(String args[]) { 

     // setting up a FileAppender dynamically... 
     SimpleLayout layout = new SimpleLayout();  
     FileAppender appender = new FileAppender(layout,"your filename",false);  
     logger.addAppender(appender); 

     logger.setLevel((Level) Level.DEBUG); 

     logger.debug("Here is some DEBUG"); 
     logger.info("Here is some INFO"); 
     logger.warn("Here is some WARN"); 
     logger.error("Here is some ERROR"); 
     logger.fatal("Here is some FATAL"); 
    } 
} 
+1

No funciona para log4j 2.7 –

80

También puede hacerlo desde el archivo log4j.properties. Utilizando el archivo de ejemplo a continuación he añadido la propiedad del sistema $ {} logfile.name:

# logfile is set to be a RollingFileAppender 
log4j.appender.logfile=org.apache.log4j.RollingFileAppender 
log4j.appender.logfile.File=${logfile.name} 
log4j.appender.logfile.MaxFileSize=10MB 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=[%-5p]%d{[email protected]\:mm\:ss,SSS}\:%c - %m%n 

El nombre del archivo de registro se puede programar de dos maneras:

  1. Como una línea de comandos, la propiedad del sistema pasó a java "-Dlogfile.name = {logfile}"
  2. En el programa java directamente estableciendo una propiedad del sistema (ANTES de realizar cualquier llamada a log4j).

    System.setProperty ("logfile.name", "alguna ruta/cadena de nombre de archivo de registro");

+6

obras excelente con el archivo de configuración xml también – avianey

+4

_ "propiedad del sistema pasada a java' -Dlogfile.name = {logfile} '" _ es exactamente lo que estaba buscando – snooze92

+0

Genial, exactamente lo que estoy buscando, pero ¿qué ocurre si la propiedad del sistema 'archivo_registro.nombre' NO está establecida en la línea de comandos? ¿Excepción de tiempo de ejecución lanzada? – t3az0r

0

también se pueden hacer por estas propiedades definen en el archivo log4j.properties

log4j.appender.logfile=org.apache.log4j.RollingFileAppender 
log4j.appender.logfile.maxFileSize=5000KB 
log4j.appender.logfile.maxBackupIndex=5 
log4j.appender.logfile.File=/WebSphere/AppServer/profiles/Custom01/error.log 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %C %M %c{1}:%L - %m%n 
0

de trabajo y el mismo ha sido probado

// setting up a FileAppender dynamically... 
SimpleLayout layout = new SimpleLayout(); 
RollingFileAppender appender = new RollingFileAppender(layout,"file-name_with_location",true); 
        appender.setMaxFileSize("20MB"); 
        logger.addAppender(appender); 
Cuestiones relacionadas