Haga que log4net use el archivo de configuración de la aplicación para los datos de configuración


Me gustaría almacenar los datos de configuración de log4net en mi aplicación.archivo de configuración. Basado en 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 aplicación.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 corro la aplicación, obtengo el siguiente error en la consola:

No se pudo encontrar ningún appender llamado [Consoleappender].

¿Cómo puedo hacer que log4net lea la configuración del archivo de configuración?

Gracias!

Author: Philipp M, 2008-12-17

5 answers

Agrega una línea a tu 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>

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

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

En el código de la aplicación, cuando cree el registro, escriba

private static ILog GetLog(string logName)
{
    ILog log = LogManager.GetLogger(logName);
    return log;
}
 35
Author: Charles Bretana,
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-01-28 18:04:30

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

 31
Author: Konstantin,
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
2012-10-20 14:13:19

¿Ha intentado agregar un controlador configsection a su aplicación?config? por ejemplo,

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
 2
Author: Joachim Kerschbaumer,
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-04-21 23:03:11

Todos los nombres de appender deben reflejarse en la sección raíz.
En su caso el nombre del appender es EventLogAppender pero en la sección <root> <appender-ref .. se llama ConsoleAppender . Tienen que coincidir.

Puede agregar varios agregadores a su configuración de registro, pero debe registrar cada uno de ellos en la sección <root>.

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

También puede consultar la documentación de apache para configurar log4net.

 1
Author: Shekhar,
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-12-30 17:36:57

Apoyo plenamente la respuesta de @Charles Bretana. Sin embargo, si no está funcionando, por favor asegúrese de que hay solo uno <section> elemento Y que configSections es el primer hijo del elemento raíz :

configsections debe ser el primer elemento en su 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>
 1
Author: Nick N.,
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
2015-01-20 14:55:47