2008-12-16 18 views
41

Me gustaría almacenar datos de configuración de log4net en mi archivo application.config. Con base en mi comprensión de la documentación, hice lo siguiente:Solicite a log4net que use el archivo de configuración de la aplicación para los datos de configuración

  1. agregar una referencia a log4net.dll

  2. Añadir la siguiente línea en AssemblyInfo.cs:

    [assembly: log4net.Config.XmlConfigurator(Watch = true)] 
    
  3. Inicializar 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, me sale el siguiente error en la consola:

Sin appender llamado [ConsoleAppender ] pudo ser encontrado.

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

Gracias!

+0

¿Qué código tiene en su app.config? – sgwill

+3

Nota para los demás: las configuraciones 'app.config' que se muestran son, aparentemente, correctas * excepto * para' EventLogAppender' en la sección '', y 'ConsoleAppender' en el' ' sección - que no coinciden. Ver la respuesta de @ Konstantin. Además, ** para otras personas que no estén familiarizadas con log4net ** al utilizar esta pregunta para aprender a usarlo, ** tenga en cuenta que probablemente desee un * tipo * de anexador ** diferente al que se encuentra aquí, como 'tipo =" log4net .Appender.FileAppender, log4net "' (que se agrega a un archivo, no al Registro de eventos de Windows). –

Respuesta

33

Añadir 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> 

Entonces posteriormente añade la sección Log4net, pero delegar en el archivo de configuración 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; 
} 
+0

Gracias justo lo que necesitaba – Jay

+0

+1 para la ubicación de configuración alternativa no me di cuenta de que era una opción –

+0

Una nota al margen, también me faltaba '[assembly: log4net.Config.XmlConfigurator (ConfigFile =" Log4Net.config ", Watch = true)] 'Específicamente ** ConfigFile =" Log4Net.config "**. –

2

¿Ha intentado agregar un controlador configsection a su app.config? p.ej.

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

Desde 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.

1

Todos los nombres de los agregadores 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 denomina ConsoleAppender. Ellos necesitan coincidir.

Puede agregar múltiples anexos 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 hacer referencia a la Apache documentation sobre la configuración de log4net.

1

Apoyo totalmente la respuesta de @Charles Bretana. Sin embargo, si no funciona, por favor asegúrese de que no es único <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> 
+0

Esta es la clave: ** es el primer hijo del elemento raíz ** – CJBS

Cuestiones relacionadas