desea iniciar sesión con Nlog y el objetivo del archivo como en este example. ¿Cómo puedo realizar una eliminación de los archivos después de x días sin archivarlos? ¿O es posible archivar los archivos en la misma carpeta?Eliminar archivos de registro después de x días
Respuesta
No sé si esto responde su pregunta, pero parece que el maxArchiveFiles
debe hacer lo que quiera. Realmente no he usado esta opción yo mismo, así que no puedo decirlo con certeza. Sin duda puede "archivar" sus archivos de registro en la misma carpeta.
Si fuera yo, haría un programa muy pequeño que hace un poco de registro y establecer el tiempo (archiveEvery="minute"
) para que sea fácil forzar la lógica de archivo para poner en marcha. Establecer maxArchiveFiles
a algo así como 5 y ver si NLog solo tiene 5 archivos de registro. Ejecute su programa por un tiempo, tal vez generando mensajes de registro a través de un temporizador para poder espaciar fácilmente los mensajes de registro durante el tiempo suficiente para que la lógica de archivado/rodaje de NLog se active.
Experimente con la plantilla de nombres del archivo de almacenamiento. El uso de la opción archiveNumbering
le da cierto control sobre cómo están numerados los archivos de almacenamiento.
Lo siento, no pude dar una respuesta más definitiva o un ejemplo concreto, pero tampoco he usado esas opciones, así que tendría que hacer el mismo experimento (s) y estoy presionado por el tiempo en este momento.
Encontré que si archivé archivos con marcas de fecha en los nombres de archivos de registro, el archivo de registro se confunde y {#}
siempre se traduce en "0", lo que hace que los registros antiguos nunca se eliminen. Además, si utilizo una referencia GDC en el nombre de archivo de registro, no cambia los registros en absoluto.
Ahora tengo que eliminar manualmente los registros antiguos si quiero estos sofisticados nombres de archivo de registro. El hecho de que tengan la fecha en el nombre del archivo les hace cambiar automáticamente de archivos.
// Delete log files older than X days
var dirInfo = new DirectoryInfo(".");
var oldestArchiveDate = DateTime.Now - new TimeSpan(30, 0, 0, 0);
foreach (FileInfo fi in dirInfo.GetFiles())
if (fi.Name.StartsWith("log-") && fi.Name.EndsWith(".txt") && fi.CreationTime < oldestArchiveDate)
fi.Delete();
var midnight = DateTime.Today.AddDays(1);
_oldLogCleanUpThread = new System.Threading.Timer(OldLogCleanUpThreadMethod, null, midnight - DateTime.Now, TimeSpan.FromDays(1));
objetivo Nlog:
filename="${environment:variable=HOMEDRIVE}${environment:variable=HOMEPATH}\logs\log-${gdc:item=MySpecialId}-${date:format=yyyyMMdd}.txt"
GDC.Set("MySpecialId", ...);
Usted puede simplemente utilizar la funcionalidad integrada de archivado. Esta configuración mantendrá 7 archivos de registro antiguos además de su registro actual. La limpieza es hecha por NLog automáticamente.
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}"
fileName="${basedir}/logs/logfile.txt"
archiveFileName="${basedir}/logs/log.{#}.txt"
archiveEvery="Day"
archiveNumbering="Rolling"
maxArchiveFiles="7"
concurrentWrites="true" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
Véase también la documentación de la file target
¿Qué sucede si uso archiveAboveSize? esto ya no funcionará porque si tengo 7 archivos en un solo día, eliminaría todo el resto. ¿Existe alguna solucion para esto? –
@UriAbramson En mi humilde opinión estos son ajustes exclusivos mutuos. – ccellar
@ccellar Sé que esto es antiguo, pero ahora usted tiene: archiveNumbering = "DateAndSequence" –
//Store the number of days after which you want to delete the logs.
int Days = 30;
// Storing the path of the directory where the logs are stored.
String DirPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Substring(6) + "\\Log(s)\\";
//Fetching all the folders.
String[] objSubDirectory = Directory.GetDirectories(DirPath);
//For each folder fetching all the files and matching with date given
foreach (String subdir in objSubDirectory)
{
//Getting the path of the folder
String strpath = Path.GetFullPath(subdir);
//Fetching all the files from the folder.
String[] strFiles = Directory.GetFiles(strpath);
foreach (string files in strFiles)
{
//For each file checking the creation date with the current date.
FileInfo objFile = new FileInfo(files);
if (objFile.CreationTime <= DateTime.Now.AddDays(-Days))
{
//Delete the file.
objFile.Delete();
}
}
//If folder contains no file then delete the folder also.
if (Directory.GetFiles(strpath).Length == 0)
{
DirectoryInfo objSubDir = new DirectoryInfo(subdir);
//Delete the folder.
objSubDir.Delete();
}
}
Puede usar el nombre del día y establecer el maxArchiveFiles
a un número fijo. Por ejemplo, antes de cada día de la semana, puede almacenar un máximo de 100 archivos de 100 Kb:
<variable name="dayname" value="${date:format=dddd}" />
<target name="logfile" xsi:type="File"
fileName="${basedir}/Logs/MyLog_${dayname}.txt"
archiveFileName="${basedir}/Logs/Archives/MyLog_${dayname}.{#####}.txt"
archiveAboveSize="102400"
archiveNumbering="Sequence"
maxArchiveFiles="100"
concurrentWrites="true"
keepFileOpen="false"
encoding="iso-8859-2" />
- 1. Tratando de eliminar los archivos mayores de x días vb.net
- 2. ¿Cómo eliminar el registro de acceso Tomcat después de n días?
- 3. ¿Log4Net puede eliminar archivos de registro automáticamente?
- 4. eliminar filas sqllite de android anteriores a x días
- 5. Eliminar archivos que son más antiguos que algunos días
- 6. Cómo eliminar archivos anteriores a X horas
- 7. buscar registros de x días anteriores?
- 8. Fecha relativa de Bash (x días atrás)
- 9. Subconjunto R X días de la semana
- 10. Ocultar/Eliminar una etiqueta después de X segundos con jquery
- 11. Eliminar todas las ramas que tienen más de X días/semanas de antigüedad
- 12. error de confirmación SVN después de eliminar archivos localmente
- 13. nAnt Eliminando archivos de más de 7 días de antigüedad
- 14. Rails times oddness: "x días a partir de ahora"
- 15. ¿Cómo eliminar archivos cuando se borra un registro?
- 16. ¿Cómo puedo eliminar/eliminar símbolos de __future__ después de importarlos?
- 17. Buscando archivos de registro enormes
- 18. filtro de plantilla "x días atrás" en Django?
- 19. Disparo de MySQL: Eliminar de la tabla DESPUÉS DE ELIMINAR
- 20. Eliminando las versiones de cada archivo en un cubo de Amazon S3 anterior a X días
- 21. Cvsignore en Eclipse después de eliminar
- 22. ¿Eliminar registros con una fecha anterior a 3 días, para un trabajo de 3 días rodando?
- 23. Eliminar formulario después de cerrar
- 24. Eliminar archivo después de cargar
- 25. Jquery - Eliminar() después de ocultar()
- 26. cómo eliminar los rieles del archivo de registro después de cierto tamaño
- 27. Eliminar llamada del registro de llamadas después del final de la llamada
- 28. Mantener x número de archivos y eliminar todos los demás - Powershell
- 29. hacer eliminar archivos de dependencia
- 30. Eliminar contenido de archivos android
Marque uno como respuesta. – Julian