configurar log4j para iniciar sesión en un archivo personalizado en tiempo de ejecución

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

En general, 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 en ese archivo en particular.

Cómo puedo conseguir esto ?

Adaptado de la documentación de 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"); } } 

También puede hacer esto desde el archivo log4j.properties. Usando el archivo de muestra a continuación, he agregado 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{yyyyMMdd@HH\:mm\:ss,SSS}\:%c - %m%n 

El nombre del archivo de registro se puede establecer de dos maneras diferentes:

  1. Como línea de comando, la propiedad del sistema pasó a java “-Dlogfile.name = {logfile}”
  2. En el progtwig 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”);

También se puede hacer con esta propiedad definir 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 

Trabajar y lo 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);