He configurado mi log4net para ver los cambios realizados en la aplicación.el archivo config.

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

Cuando ejecuto mi aplicación y cambiar las cosas en el archivo de configuración, estos cambios sólo se aplicarán cuando reinicie mi aplicación. ¿Por qué puede ser esto?

Es también una manera de decirle a log4net ver en los cambios en la aplicación.config? Como:

<appender name="FileAppender" type="log4net.Appender.FileAppender" >
    <watch value="true" />
</appender>

————- EDITAR ————-

Traté de ahora usar un archivo de configuración: log4net.config.

Se parece a esto:

<log4net>
  <appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="c:\log.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d [%t] %-5p %c (line %L) -- %m%n" />
    </layout>
  </appender>
  <root>
    <appender-ref ref="FileAppender" />
  </root>
</log4net>

En mi assemblyInfo.cs me escribió lo siguiente:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

La clase que los registros en el archivo se parece a esto:

ILog myLogger = LogManager.GetLogger(typeof(Form1));
myLogger.Debug("test");

Esto funciona igual que la versión anterior. el archivo de registro de entradas, pero cuando cambio a mi log4net.de configuración en tiempo de ejecución, estos cambios no se aplican…. «Ver=true» debe activar esa opción, ¿verdad?

OriginalEl autor Fabian | 2011-10-19

3 Comentarios

  1. 12

    ¡JA!, Yo sólo era encontrarse con el mismo problema, la ejecución de la unidad de pruebas que requieren registro.

    Añadir esta línea fija:

    log4net.Config.XmlConfigurator.Configure();

    Mi Aplicación.config:

    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="log.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="100KB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>
        <root>
            <level value="DEBUG" />
            <appender-ref ref="RollingFileAppender" />
        </root>
    </log4net>

    Tengo también este:

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    No es como no ver a mi todo el fichero de configuración. es sólo que los cambios realizados en el archivo de configuración en tiempo de ejecución, no tome efecto.
    incluso después de llamar a log4net.Config.XmlConfigurator.Configure(); después de hacer los cambios?
    por desgracia sí. no puedo explicar esto…. puede editar el archivo de configuración en tiempo de ejecución ? por ejemplo, la conversión de patrón, y inmediatamente a estos cambios surtan efecto?..
    No creo que los relojes de la sección de forma continua, véase: stackoverflow.com/questions/436700/… Si haces la actualización de la sección que habla y que es llamada .Configure() se puede actualizar la configuración.

    OriginalEl autor maxfridbe

  2. 9

    Según log4net documentación, el Reloj característica no funciona para archivos de configuración de aplicaciones (app.configuración web.config):

    Porque el Sistema.Configuración de la API no admite recarga del archivo de configuración
    las opciones de configuración no se puede ver el
    log4net.Config.XmlConfigurator.ConfigureAndWatch métodos.

    Así que si usted necesita el log4net de configuración para ser re-configurable, usted tendrá que ponerlo en un archivo XML independiente y su aplicación necesita tener permisos suficientes para leer el archivo:

    El archivo para leer la configuración de puede ser especificado usando cualquiera de los log4net.Config.XmlConfigurator métodos que aceptar un Sistema.IO.Objeto FileInfo. Porque el sistema de archivos puede ser monitoreado para el archivo de las notificaciones de cambio de la ConfigureAndWatch métodos pueden ser utilizados para controlar el archivo de configuración para modificaciones y automáticamente volver a configurar log4net.

    OriginalEl autor Igor Brejc

  3. 0

    A pesar de que yo estoy terriblemente tarde a la fiesta – he aquí, lo que me ayudó: una simple llamada a log4net.LogManager.GetLogger("DUMMY"); en el inicio de mi programa. Las he puesto en la primera línea de programa.cs‘s Main() método. No hay necesidad de asignar el registrador a cualquier objeto, simplemente una petición amable a log4net a leer la asamblea atributos como se indica aquí.

    Mediante el uso de atributos puede ser un claro método para definir donde la configuración de la aplicación se cargará. Sin embargo vale la pena señalar que los atributos son puramente pasiva. Son sólo información. Por lo tanto, si utiliza la configuración de los atributos se debe invocar log4net para permitir la lectura de los atributos. Una simple llamada a LogManager.GetLogger hará que los atributos en la convocatoria de la asamblea para ser leídos y procesados. Por lo tanto, es imperativo hacer un registro de la llamada tan pronto como sea posible durante el inicio de la aplicación, y ciertamente antes de cualquier ensamblados externos se han cargado y se invoca.

    OriginalEl autor Lemmes

Dejar respuesta

Please enter your comment!
Please enter your name here