Permisos de log4j en el properties

Hola a todos buenas tardes,

Actualmente tengo un archviv log4j.properties configurado en mi proyecto Java:

## Configuracion Log4j
log4j.rootLogger= DEBUG, toConsole, toFile
# Indica el alias para la salida de log, podemos tener varias.

## Appender Console ##
log4j.appender.toConsole = org.apache.log4j.ConsoleAppender
# Consola utiliza PatternLayout
log4j.appender.toConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.toConsole.layout.ConversionPattern=[%d] [%t] %5p %c.%M %x => %m%n

## Appender File Log ##
log4j.appender.toFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.toFile.File = ../log/logFile_Log.log
log4j.appender.toFile.DatePattern ='.'yyyy-MM-dd
log4j.appender.toFile.layout=org.apache.log4j.PatternLayout
log4j.appender.toFile.layout.ConversionPattern=[%d] [%t] %5p %c.%M %x %L => %m%n

En la primera ejecución de mi Jar no hay problema con la creación del archivo.log.

El escenario es el siguiente:

Tengo un servidor Debian Linux, donde le di acceso a 5 usuarios para que ejecuten los shells que invocan los jar.
Todos los usuario los integre a un grupo con permisos umask 002.

umask -S u=rwx,g=rwx,o=rx

De esta forma me aseguro que todos los usuarios pueden generar archivos con permisos de lectura y escritura en los grupos, todos los usuarios los valide y si generan archivos con las especificaciónes antes mencionadas.

El problema es que los archivos que genera el jar tienen permisos de lectura nada mas para los grupos. Vuelvo a repetir todos los usuarios están configurados para que sus archivos tengan permisos de escritura en el grupo.

El java me lanza la exception:

log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: ../log/logFile_ReportesPcLinux.log (Permiso denegado)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:221)
at java.io.FileOutputStream.(FileOutputStream.java:142)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
at org.apache.log4j.LogManager.(LogManager.java:127)
at org.apache.log4j.Logger.getLogger(Logger.java:117)
at com.maxcom.ssh.main.GenerateReporte.(GenerateReporte.java:16)
log4j:ERROR Either File or DatePattern options are not set for appender [toFile].

Mis preguntas son:

¿ Se debe establecer algún permiso de creación de archivos en el properties del log4j ?
¿ Se debe puntualizar la creación de permisos en los jar o class java ?

Nota: Los jars y shell tienen permisos full (chmod 777)

Si alguién ha tenido alguna experiencia familiar y puerta compartir opiniones, de ante mano se lo agradecere mucho.

Saludos.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

path absoluto

No te compliques. Ponle una ruta absoluta, y guarda tus logs fuera del contenedor, en /var/log o un lugar similar.

¿Sí existe?

¿Sí existe el archivo ese?

Código:

File file = new File("../log/logFile_Log.log");
System.out.printf("Absolute Path: %s%n", file.getAbsolutePath());
System.out.printf("Canonical Path: %s%n", file.getCanonicalPath());
System.out.printf("Exists: %s%n", file.exists());
System.out.printf("Can Write: %s%n", file.canWrite());

Posible salida:

Absolute Path: /home/jpaul/apps/app/../log/logFile_Log.log
Canonical Path: /home/jpaul/apps/log/logFile_Log.log
Exists: false
Can Write: false
Imagen de linux-genesis

Solucionado!!

Hola ezamudio muchas gracias por el aporte,

Antes de cambiar a una ruta absoluta, lo que hice fue borrar todos los logs que tenia creado y ejecutar el jar con todos los usuarios posibles.
Ahi me dí cuenta que no era problema de mi Jar, ya que si generaba el archivo con el siguiente permiso:

-rw-rw-r-- 1 mediacion mediacion 36456 jun 19 14:50 logFile_ReportesPcLinux.log

Esto significa que quien me estaba ocasionando problemas era el cron.
Cuando el cron ejecutaba mi Shl, los logs me los generaba con permisos de lectura tanto para el usuario ,grupo. Asi que me puse a pensar un poco y me dije tal vez agregando al usuario root al grupo que tienen los demás usuarios y sobre todo, dejandolo como maestro veremos que pasa. Aplique los cambios pero aún no veia resultados. Me puse a investigar y llegue al siguiente link : http://www.linuxtotal.com.mx/?cont=info_admon_006

El cual me recordo que el cron es un proceso y que como todo proceso para que reciba los cambios debe ser reiniciado.
Entonces aplique los siguientes comandos:

/etc/init.d/cron stop
/etc/init.d/cron start

Programe nuevamente el cron para un horario que pudiera ver los resultados y woaaalaaa!!!!
los logs se están generando con permisos de escritura en el grupo.

Al final fue un tema del Cron en el linux.

En la red encontré a muchos con el mismo problema, incluso algunos dicen
que para los OS linux y Mac se deben ejecutar con permisos de root para evitar el escenario, pero en mi caso no funciono.

Espero este aporte sirva de ayuda para otros quienes esten trabajando con multiples usuarios en linux para la ejecución de procesos.

Saludos.