¿Cómo puedo configurar log4net para registrar mis archivos en diferentes carpetas cada día?

  1. Quiero guardar todos los registros en cada día en la carpeta llamada YYYYMMdd – log4net debería manejar la creación de una nueva carpeta según el sistema datetime – ¿cómo puedo configurar esto?
  2. Quiero guardar todos los registros durante el día en n archivos de 1 MB; no quiero reescribir los archivos antiguos, pero realmente tengo todos los registros durante un día. ¿Cómo puedo configurar esto?

Estoy usando C #

Saludos Alex

Prueba esto (¡debería estar bien!):

       

Creará un archivo de registro llamado ‘logs \ 2010 \ 04 \ 02.inf.log’ (fecha de salida el 2010-04-02)

Gracias a todos. Creamos SortByFolderFileAppender, que hereda de RollingFileAppender

Ejemplo de resultado final: somewhere \ Logs \ 20100305 \ Client-104615.0

 namespace CustomLogging { public class SortByFolderFileAppender : log4net.Appender.RollingFileAppender { protected override void OpenFile(string fileName, bool append) { //Inject folder [yyyyMMdd] before the file name string baseDirectory = Path.GetDirectoryName(fileName); string fileNameOnly = Path.GetFileName(fileName); string newDirectory = Path.Combine(baseDirectory, DateTime.Now.ToString("yyyyMMdd")); string newFileName = Path.Combine(newDirectory, fileNameOnly); base.OpenFile(newFileName, append); } } } 
               

Creo que puedes crear tu propio appender, basado en la clase FileAppender . Es posible que deba sobrescribir el método OpenFile para crear un archivo en la ubicación correcta.

Puede usar el rollinglogfileappender, que crea archivos nombrados por fecha y comienza un nuevo archivo a la medianoche. Luego solo escriba un script que los mueva a un mapa correcto en 00.01.

En cuanto a registrar todos los archivos durante un día con un máximo de 1 MB por archivo, aquí hay un ejemplo:

               

Para comstackr 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”, entonces no es necesario agregar nada. Supongo que se produjo algún tipo de locking y quiero que log4net intente usar el mismo nombre de archivo nuevamente, esperando que se haya liberado el locking 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 necesitamos 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 = $@"{fileName}\{DateTime.Now:yyyy\\MM\\dd}.log"; base.OpenFile( fileName, append ); } 

Modificación de la configuración desde arriba.