Tengo un servicio web ASMX que ejecuta IIS 10 y he agregado log4net al proyecto con la siguiente configuración:
<appender name="AsmxDebugLogFile" type="log4net.Appender.RollingFileAppender"> <file value="App_Data/ASMX.DEBUG_" type="log4net.Util.PatternString" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datePattern value="yyyy-MM-dd'.log'" /> <maximumFileSize value="5GB" /> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <logger name="AsmxDebugLogFile"> <level value="DEBUG" /> <appender-ref ref="AsmxDebugLogFile" /> </logger> Pero por alguna razón, obtengo dos archivos de registro por día en el formato yyyy-MM-dd.log.yyyy-MM-dd.log según la captura de pantalla a continuación, aparentemente también en momentos aleatorios, por lo que el archivo de registro cambiará al archivo de registro recién creado y luego comenzará a iniciar sesión nuevamente en el archivo de registro que se creó a la medianoche del día en cuestión. Todos los archivos de registro también están muy por debajo del tamaño máximo de archivo de 5 GB.
A continuación se muestra una lista actualizada de archivos de registro
Parece que inicialmente, log4net inicia sesión en el archivo yyyy-MM-dd.log, y luego, después de un período de tiempo aleatorio, crea un nuevo archivo de registro yyyy-MM-dd.log.yyyy-MM-dd.log comienza a escribir en este log y luego regresa y se registra en yyyy-MM-dd.log que se creó al comienzo del día.
Estas son las configuraciones de reciclaje de IIS
Quiero 1 archivo de registro por día en el formato ASMX.DEBUG_yyyy-MM-dd.log. ¿Dónde me estoy equivocando con esta configuración?
ACTUALIZAR
Parece que debido a que estamos reciclando el grupo de aplicaciones cada 60 minutos dependiendo de si el archivo de registro se está escribiendo en este momento, depende de si se crea uno nuevo. Cualquier sugerencia sobre cómo superar este problema. En este momento, agregué el process_id en el nombre del archivo de registro y parece funcionar porque obtengo un nuevo archivo de registro creado cada hora, pero idealmente quiero solo 1 archivo de registro por día.
Uso log4net para todas mis aplicaciones y nunca encontré esta recreación de archivo después de un reciclaje de grupo.
Aquí están mis parámetros que difieren de los suyos:
<appendToFile value="true"/> <staticLogFileName value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>Y así es como el comportamiento será diferente:
staticLogFileName significa que el nombre del archivo del día actual siempre será el mismo ( ASMX.DEBUG_.log aquí). Se renombrará automáticamente con el patrón de fecha del día siguiente.appendToFile significa que no sobrescribirá el archivo del día actual, sino que lo agregará.Creo que esos dos primeros parámetros evitarán la creación de varios archivos para el día actual, lo que puede solucionar su problema.
MinimalLock es menos claro para mí, pero debo mencionarlo de todos modos:Abre el archivo una vez por cada ciclo AcquireLock()/ReleaseLock(), manteniendo así el bloqueo por la mínima cantidad de tiempo. Este método de bloqueo es considerablemente más lento que FileAppender. ExclusiveLock pero permite que otros procesos muevan/eliminen el archivo de registro mientras continúa el registro.
<appender name="AsmxDebugLogFile" type="log4net.Appender.RollingFileAppender"> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>Creo que necesita un modelo de bloqueo que no bloqueará su archivo. Creo que cuando se crea el archivo principal y se bloquea. El agregador de archivos crea un nombre de archivo con la misma marca de fecha y hora sobre el archivo existente. También debe usar la ruta remota para iniciar sesión como \\server\file\debug, ya que es posible que tenga un equilibrador de carga para IIS o que el servidor web esté alojado con IP estática o F5.
Prueba con estos parámetros.
<param name="File" value="C:\YourLogFilePath\" /> <rollingStyle value="Composite" /> <param name="DatePattern" value="dd.MM.yyyy'.log'" /> <param name="AppendToFile" value="true" /> <maxSizeRollBackups value="2" /> <maximumFileSize value="5GB" /> <staticLogFileName value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />