2012-04-18 17 views
10

Tengo esta configuración para log4net en el log4net.config para permitir que múltiples hilos para escribir en el mismo archivo:hilos log4net + + rodando múltiples appender archivo

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <!-- Minimal locking to allow multiple threads to write to the same file --> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
    <file value="log\UI.log"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <maxSizeRollBackups value="30"/> 
    <datePattern value="-yyyyMMdd"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%date [%thread] %-5level [%property{identity}] %logger{3} - %message%newline"/> 
    </layout> 
</appender> 

Pero después de la medianoche el nuevo archivo de registro creado se sobrescribe todo el tiempo y, por lo tanto, solo existe el último evento en el archivo. Después de reiniciar el servidor, todo vuelve a la derecha hasta la medianoche siguiente.
¿Puede alguien decir si esto es un problema de configuración o es solo un problema de log4net?

+0

¿Alguna solución para permitir que cada hilo escriba en diferentes archivos (es decir, cada hilo tiene su propio archivo)? –

Respuesta

10

El problema se solucionó eliminando la clave del modelo de bloqueo ya que solo tengo un proceso (IIS, w3wp.exe) que utiliza el mismo registrador.

<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 

Como se dijo here:

Si utiliza RollingFileAppender cosas se vuelven aún peor, ya que varios procesos pueden tratar de empezar a rodar el archivo de registro al mismo tiempo. RollingFileAppender ignora completamente el modelo de bloqueo cuando se mueven los archivos, simplemente no es compatible con este escenario.

Creo que obtendrá resultados impredecibles.

0

Supongo que el uso de un signo en el datePattern está confundiendo el marco para que después del primer rollo cualquier registro desencadene un evento roll.

Qué pasa cuando se intenta esto con

<datePattern value="yyyyMMdd" /> 

por el ejemplo here.

Para cambiar el período de balanceo, ajuste el valor del DatePattern. Para ejemplo, un patrón de fecha de "aaaaMMdd" se extenderá todos los días. Consulte System.Globalization.DateTimeFormatInfo para obtener una lista de patrones disponibles.

Cuestiones relacionadas