log4net - studio - net4log
log4net-configura usando múltiples archivos de configuración (3)
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.
Sólo el host tiene un archivo de App.config. Los complementos tienen su propio archivo de configuración que contiene las secciones de configuración de log4net.
Al llamar a XmlConfigurator.Configure desde uno de los complementos, se anulan las definiciones de log4net del host app.config.
¿Hay una manera fácil de agregar configuraciones en lugar de anularlas?
Gracias, Gai.
Otra forma más es tener varios archivos de configuración log4net en varios lugares, cargarlos todos en un XDocument
para componer efectivamente uno solo y luego llamar a XmlConfigurator.Configure() . La forma en que lo hice fue crear cada archivo siguiendo la XSD para la configuración, cargar todos los elementos log4net
nodo raíz log4net
de cada archivo en instancias separadas de XElement
y combinarlos en un nuevo XDocument
con un nodo raíz log4net
. Actualizaré esta respuesta con el código (no está frente a mí en este momento) si alguien está interesado.
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 ensamblajes 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
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 cualquier persona que encuentre esta pregunta en el futuro.
log4net tiene un concepto llamado repositorios que se pueden configurar por separado. No es muy popular ni está muy bien documentado, pero aquí hay algunos documentos que encontré:
http://logging.apache.org/log4net/release/manual/repositories.html
De todos modos, todo lo que necesita hacer es agregar RepositoryAttribute
en su conjunto de complementos o conjuntos con un nombre de repositorio único para ese complemento y log4net lo mantendrá separado de todo lo demás.
Acabo de encontrarme con este problema. Si bien no es exactamente lo que llamaría "ideal", creo que la mejor solución actualmente es utilizar el método ConfigureAndWatch
de la clase XmlConfigurator
. Básicamente, su ensamblaje del host ha configurado la configuración de log4net usando un archivo de configuración específico. Cuando se carguen sus complementos, haga que escriban sus elementos de configuración en la sección de configuración de log4net en ese mismo archivo de configuración. Ya que se le ha dicho a log4net que observe los cambios en ese archivo con ConfigureAndWatch
, cuando el archivo tenga esos nuevos datos agregados, log4net volverá a cargar la configuración, que ahora incluirá los elementos de configuración de los complementos.
Esto es un poco pirateado, 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 sea 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 vuelve a cargar y se aplica al repositorio del registrador.