Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/11/2011, 07:02
Rapidiablo
 
Fecha de Ingreso: febrero-2008
Mensajes: 42
Antigüedad: 16 años, 9 meses
Puntos: 0
log4j - ruta dinamica para el log

Buenas gente, estoy agregando los logs de log4j en mi aplicacion y me surgio la necesidad de agregar o inventar una ruta para el archivo de logs. En otra palabras, quiero que el archivo de logs no este por defecto a donde lo indicamos en el archivo log4j.properties:

Código:
log4j.appender.file.File=C:\\Tools\\apache-tomcat-7.0.21\\webapps\\test-security-client\\loging.log
Por lo que, por ejemplo, me gustaria cargar la ruta dependiendo con que version de tomcat lo ejecute, por que si no, si o si tiene que existir esa ruta (y puede que no).

Eh estado mirando varios post, tratando de buscar una respuesta y la respuesta mas aceptable dice (traducido):

Código:
log.dir=/var/log/foo
rrd.dir=${log.dir}/rrd
datestamp=yyyy-MM-dd/HH:mm:ss.SSS/zzz
roll.pattern.hourly=.yyyy-MM-dd.HH
roll.pattern.daily=.yyyy-MM-dd

# catchAll.log -- Default catch-all.
log4j.rootLogger=DEBUG, defaultLog
log4j.appender.defaultLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.defaultLog.DatePattern=${roll.pattern.daily}
log4j.appender.defaultLog.File=${log.dir}/catchAll.log
log4j.appender.defaultLog.layout=org.apache.log4j.PatternLayout
log4j.appender.defaultLog.layout.ConversionPattern=%d{${datestamp}} [%t] %-5p %m%n
Cita:
Traduccion: Mucha gente se queja de que log4j te fuerza a hardcodear la ubicacion del archivo de logs. Pero, es posible elegir la ubicacion de este archivo, especialmente si usas la propiedad de sustitucion ${log.dir}, asi es como es:

String dynamicLog = // log directory somehow chosen...
Properties p = new Properties( Config.ETC + "/log4j.properties" );
p.put( "log.dir", dynamicLog ); // overwrite "log.dir"
PropertyConfigurator.configure( p );
Creo que la solucion es lo que ando buscando, el tema es que no se me ocurre de hacerlo!. Y aca me entran las dudas:

1- El archivo log4j.properties de log4j no es lo primero que se carga?
2- Para agregar ese codigo que modifica la variable log.dir, tengo que crear una nueva clase? como hago para ejecutarla antes que se cargue log4j.properties o es despues? (creo que me hice un nudo de conceptos!)

Estoy usando Spring y soy bastante nuevo con todo! jeje...

Alguien me podria tirar un salvavidas o aclararme los conceptos??

Gracias por leer de antemano!! Saludos!