visual studio appenders c# logging log4net

c# - studio - Haga que log4net use el archivo de configuración de la aplicación para los datos de configuración



log4net implementation in c# (5)

Me gustaría almacenar los datos de configuración de log4net en mi archivo application.config. Según mi comprensión de la documentación, hice lo siguiente:

  1. Agregue una referencia a log4net.dll

  2. Agregue la siguiente línea en AssemblyInfo.cs:

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]

  3. Inicialice el registrador de la siguiente manera:

    private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard));

  4. Tengo el siguiente código en mi app.config:

<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <root> <level value="INFO" /> <appender-ref ref="ConsoleAppender" /> </root> </log4net>

Sin embargo, cuando ejecuto la aplicación, aparece el siguiente error en la consola:

No se pudo encontrar un appender llamado [Consoleappender].

¿Cómo puedo obtener Log4net para leer la configuración desde el archivo de configuración?

¡Gracias!


¿Has intentado agregar un controlador de configsection a tu app.config? p.ej

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>


Agregue una línea a su app.config en el elemento configSections

<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" /> </configSections>

A continuación, agregue la sección log4Net, pero delegue en el archivo de configuración log4Net real en otro lugar ...

<log4net configSource="Config/Log4Net.config" />

En el código de su aplicación, cuando crea el registro, escriba

private static ILog GetLog(string logName) { ILog log = LogManager.GetLogger(logName); return log; }


Apoyo totalmente la respuesta de @Charles Bretana. Sin embargo, si no funciona, asegúrese de que solo haya un elemento <section> Y que configSections sea ​​el primer elemento secundario del elemento raíz :

configsections deben ser el primer elemento en su app.Config . app.Config después de la configuración:

<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" /> </configSections> <!-- add log 4 net config !--> <!-- add others e.g. <startup> !--> </configuration>


De la configuración que se muestra en la pregunta solo hay un appender configurado y se llama "EventLogAppender". Pero en la configuración de raíz, el autor hace referencia a un appender llamado "ConsoleAppender", de ahí el mensaje de error.


Todos los nombres de los apéndices deben reflejarse en la sección raíz.
En su caso, el nombre del apéndice es EventLogAppender, pero en la sección <root> <appender-ref .. se denomina ConsoleAppender . Ellos necesitan coincidir.

Puede agregar múltiples appenders a su configuración de registro, pero necesita registrar cada uno de ellos en la sección <root> .

<appender-ref ref="ConsoleAppender" /> <appender-ref ref="EventLogAppender" />

También puede consultar la documentation apache sobre la configuración de log4net.