Para compilar a partir de la respuesta anterior utilizando SortByFolderFileAppender.
Así es como resolvimos el problema utilizando la fecha de actualización para los nombres de archivo de registro. Cambié staticLogFileName a verdadero para que todo el nombre de archivo pase al método OpenFile.
Si el nombre del archivo termina en ".log", no es necesario agregar nada. Supongo que se produjo algún tipo de bloqueo y quiero que log4net intente usar el mismo nombre de archivo nuevamente, esperando que se haya liberado el bloqueo anterior.
Aunque no estoy seguro de si esto podría causar una llamada infinita a OpenFile si el archivo está bloqueado y no lo suelta. Creamos un servicio web utilizando el patrón de consumidor productor para registrar todo en una ubicación desde todas las aplicaciones en el sistema, que actualmente es diez y está creciendo.
No necesitamos incluir log4net en ninguna de las otras aplicaciones, pero necesitábamos crear una clase de cliente web a la que puedan acceder todas las aplicaciones para usarla para iniciar sesión en el servicio web.
El resultado para el nombre del archivo es "Logs \ Client \ 2017 \ 11 \ 08.log" y obviamente cambia todos los días.
protected override void OpenFile(string fileName, bool append)
{
// append "\yyyy\mm\dd.log" to create the correct filename.
if (!fileName.EndsWith(".log"))
fileName = [email protected]"{fileName}\{DateTime.Now:yyyy\\MM\\dd}.log";
base.OpenFile(fileName, append);
}
Modificación de la configuración desde arriba.
<appender name="xxxRollingFileAppender" type="namespace.xxxRollingFileAppender">
<file value="Logs\Client"/>
<staticLogFileName value="true"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="40"/>
<maximumFileSize value="1MB"/>
<encoding value="utf-8"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss.fff}|%-5level|%message%newline"/>
</layout>
</appender>
¿Es posible en OpenFile agregarse al registro actual? Me gustaría agregar un par de mensajes a mi appender personalizado de esa manera. –
Logré obtener algo escrito en stderr usando LogLog.Warn/LogLog.Error pero quizás no sea posible que los métodos de log4net tengan acceso al registro actual. –
Esta solución no funcionará como se espera si staticLogFileName se establece en True. En mi caso, quiero diferentes carpetas para cada día, pero el mismo nombre de archivo dentro. Si esta propiedad se establece en true, log4net copia el archivo en la carpeta especificada para la propiedad File del appender, y la carpeta inyectada permanece vacía. – XMight