2010-10-01 10 views
5

Estoy escribiendo una aplicación que consta de varios módulos Maven. Todos ellos tienen que registrar cosas en sus propios archivos de registro. Creé un archivo log4j.properties en la carpeta principal/recursos de cada módulo. Ahora cuando inicio la aplicación desde uno de los módulos, escribe todo en el archivo de registro de ese módulo. Me preguntaba si esto era solo porque podría haber tomado el directorio raíz de ese módulo de inicio y lo usé para guardar los archivos de registro, pero cuando creo un appender para ese módulo de inicio (usando categoría en las propiedades log4j) y no rootLogger me da un error sobre las clases en los otros módulos que no pueden encontrar sus apéndices, lo que indica que los archivos log4j.properties en cada uno de esos módulos no se encuentran ni se leen. Alguien tiene alguna idea de cómo resolver esto y hacer que esos módulos usen esos archivos de propiedades, o tengo que poner todos los apéndices en un gran archivo log4j.properties, haciendo que todos los registros aparezcan en la carpeta raíz de ese módulo de inicio en lugar de las carpetas raíz de esos otros módulos?Propiedades de Log4j de cada módulo

Espero que la pregunta sea lo suficientemente clara como para comprenderla, de lo contrario no dude en solicitar detalles.

+1

Puede dar más información acerca de su aplicación; por ejemplo, ¿es una aplicación web? ¿Está implementado en un servidor de aplicaciones? – Qwerky

+0

Esta aplicación se ejecutará todas las semanas para actualizar una base de datos que contenga datos de proteínas. Primero comprueba si hay datos nuevos en varias otras bases de datos, luego si hay datos que se leen, hace algún cálculo con él (enviándolo a un servicio web especial que hace el cálculo) recupera los datos de ese servicio web y luego lo ingresa en mi base de datos de proteínas. Uno de los módulos es un módulo de hibernación que habla con mi base de datos. El problema que estoy teniendo es que ese tipo de hibernación registra todo lo que hace.Quiero separar esos registros de los registros de los otros módulos. – FinalArt2005

Respuesta

0

Hasta donde yo sé, solo el log4j.properties del módulo invocado se lee y se inicializa de manera predeterminada.

Si desea invocar los módulos por separado desde un único módulo de inicio, deberá agregar todos sus apéndices a un único archivo log4j.properties ubicado en el directorio start-module/src/main/resources. Si y cuando quisieras esto, probablemente sea una pregunta de arquitectura.

Solo una sugerencia: cambie ahora al registro basado en XML si desea controles de registro más avanzados ahora o en el futuro.

0

Si incluye log4j.properties por separado en el src/main/resources de cada módulo separado y carga los archivos jar generados en un solo cargador de clases, solo se cargará un recurso ya que log4j carga los archivos de propiedades del cargador de clases (sus recursos se superponen en nombre de archivo).

No incluiría archivos log4j.configuration en any de mis archivos jar. Por dos razones:

  • No funcionará en su caso.

  • Para configurar log4j (verbosidad de edición de los registradores), tendría que abrir el archivo jar y editar el archivo de propiedades.

Una solución diferente podría ser hacer otro módulo de producción de un (http://maven.apache.org/plugins/maven-shade-plugin/) archivo JAR a la sombra de los módulos restantes, que incluye un único log4j.properties en src/main/recursos. Luego, si tiene otro módulo que consume sus proyectos anteriores como dependencias, solo podría incluir como dependencia el sombreado.

Sin embargo, esa es una solución que no usaría.

Espero que ayude.

Cuestiones relacionadas