log4net-configurar usando varios archivos de configuración


Tengo una aplicación que consiste en un host y módulos conectables (plugins).

Quiero poder configurar log4net para el host y para cada uno de los otros módulos. Cada uno de ellos debe tener su propio archivo de configuración y cada uno se registrará en un archivo diferente.

Solo el host tiene una aplicación.archivo de configuración. Los plugins tienen su propio archivo de configuración que contiene las secciones de configuración de log4net.

Llamando a XmlConfigurator.Configurar desde uno de los plugins anula el host app.config log4net definiciones.

¿Hay una manera fácil de anexar configuraciones en lugar de sobrescribirlas?

Gracias, Gai.

Author: Stuart Childs, 2010-05-05

3 answers

Acabo de encontrarme con este problema. Si bien no es exactamente lo que yo llamaría "ideal", creo que la mejor solución actualmente es usar el método ConfigureAndWatch de la clase XmlConfigurator. Básicamente, tiene su ensamblaje de host configurando la configuración de log4net usando un archivo de configuración específico. Cuando se carguen los complementos, pídales que escriban sus elementos de configuración en la sección de configuración de log4net en ese mismo archivo de configuración. Dado que se le ha dicho a log4net que vigile ese archivo para cambios con ConfigureAndWatch, cuando el archivo tiene esos nuevos datos agregados, log4net recargará la configuración que ahora incluirá los elementos de configuración de los complementos.

Esto es un poco hackish, pero parece funcionar. El siguiente paso, por supuesto, será mover esto a mi marco de registro para que el acceso al archivo de configuración esté federado.

Tenga en cuenta que hay un breve retraso entre la configuración del complemento que se escribe / guarda y la configuración actualizada que se recarga y se aplica al registrador repositorio.

 2
Author: Stuart Childs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-06 18:32:26

Parece que ya ha encontrado una solución que funciona para usted. Sin embargo, he encontrado una solución diferente que considero "más ideal", así que la publicaré aquí para quien pueda encontrar esta pregunta en el futuro.

Log4net tiene un concepto llamado repositorios que se pueden configurar por separado. No es muy popular ni muy bien documentado, pero aquí hay algo de documentación que encontrado:

Http://logging.apache.org/log4net/release/manual/repositories.html

De todos modos, todo lo que necesita hacer es agregar RepositoryAttribute en su ensamblaje o ensamblados de complementos con un nombre de repositorio único para ese complemento y log4net lo mantendrá separado de todo lo demás.

 16
Author: Tinister,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-30 14:49:17

Otra forma es tener varios archivos de configuración de log4net en varios lugares, cargarlos todos en un XDocument para componer efectivamente uno solo, y luego llamar a XmlConfigurator.Configure () . La forma en que hice esto fue crear cada archivo siguiendo el XSD para la configuración, cargar todos los hijos del nodo raíz de cada archivo log4net en instancias XElement separadas y fusionarlas en un nuevo XDocument con un nodo raíz log4net. Actualizaré esta respuesta con el código (no está frente a mí en el momento) si alguien está interesado más.

Encontrar los archivos es otra cuestión: use algún tipo de convención para buscar archivos (por ejemplo, *.dll.log4net.config), incrustarlos en los ensamblados, o algo así.

Una implementación de dicho código se puede encontrar en:

Www.kopf.com.br/kaplof/using-multiple-configuration-files-with-log4net

 4
Author: Kit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-24 16:59:55