inicialización de log4net


He buscado mucho duplicados, pero tengo que preguntar lo siguiente, no importa lo básico que pueda parecer, para que quede claro de una vez por todas!

En una nueva aplicación de consola usando log4net versión 1.2.10.0 en VS28KSP1 en W7 de 64 bits, tengo el siguiente código: -

using log4net;
using log4net.Config;

namespace ConsoleApplication1
{
    class Program
    {
        static readonly ILog _log = LogManager.GetLogger(typeof(Program));
        static void Main(string[] args)
        {
            _log.Info("Ran");
        }
    }
}

En mi app.config, tengo:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Program.log" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%username] %date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>

</configuration>

Esto no escribe nada, a menos que agregue un atributo:

[ assembly:XmlConfigurator ]

O inicializarlo explícitamente en Main ():

_log.Info("This will not go to the log");
XmlConfigurator.Configure();
_log.Info("Ran");

Esto plantea lo siguiente preguntas:

  1. Estoy casi seguro de que lo he visto trabajar en algún lugar en alguna versión de log4net sin la adición del atributo assembly o llamada en Main. ¿Alguien me puede asegurar que no me estoy imaginando eso?
  2. ¿Puede alguien indicarme en qué parte del documento se indica explícitamente que se requieren tanto la sección de configuración como el gancho de inicialización - esperemos que con una explicación de cuándo cambió esto, si es que lo hizo?

Puedo imaginar fácilmente por qué esto podría ser el política having tener el paso de inicialización explícito para evitar sorpresas, etc., es sólo que me parece recordar que esto no siempre es el caso... (Y normalmente tengo la configuración en un archivo separado, que generalmente toma configsections fuera de la imagen)

Author: Ruben Bartelink, 2009-08-11

1 answers

De acuerdo con la página de configuración en el manual :

La configuración de log4net se puede configurar utilizando atributos de nivel ensamblador en lugar de especificarlos mediante programación.

XmlConfiguratorAttribute: El log4net.Config.XmlConfiguratorAttribute Permite que el XmlConfigurator se configure usando las siguientes propiedades:

  • ConfigFile ...
  • ConfigFileExtension ...

Si no se especifica ninguna de las propiedades ConfigFile o ConfigFileExtension, el archivo de configuración de la aplicación (por ejemplo, TestApp.exe.config) se utilizará como archivo de configuración de log4net.

Ejemplo de uso:

// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
// This will cause log4net to look for a configuration file
// called TestApp.exe.config in the application base
// directory (i.e. the directory containing TestApp.exe)
// The config file will be watched for changes.

Estoy de acuerdo en que es un poco ambiguo, pero interpreto que la existencia del uso de ejemplo significa que log4net no usará el .archivo de configuración sin el atributo anterior; y el hecho de que señalen que tienes que usar una de las dos propiedades, pero no digas nada acerca de omitir el atributo por completo, me sugiere que el atributo (o llamada programática) es necesario para usar app.config en la forma que desee.

 28
Author: Mark Rushakoff,
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
2009-08-11 16:19:05