Tenemos un archivo de registro simple. Se vuelve demasiado grande o las entradas son irrelevantes a medida que envejecen. Las entradas tienen un prefijo de fecha y hora similar a este:
22/01/15 01:54:17 -I- Comenzar a procesar cosas
Ocasionalmente, las entradas de registro abarcan varias líneas como esta:
01/23/15 01:18:00 -E- java.io.IOException: (101) Error between keyboard and chair
at this.mod.no.worky(what_were_you_thinking:duh)
Simplemente queremos eliminar las entradas (enteras) antes de una fecha límite, por ejemplo, llamarlo 30 días.
Las soluciones que se truncan a un número fijo de líneas o bytes no funcionan en este caso.
Intento más reciente con un rendimiento terrible:
$cutDatePtrn = "^" + (get-date).AddDays(-30).tostring("MM/dd/yy ")
$newStartLine = (select-string -Path $logFile -Pattern $cutDatePtrn -Quiet -List).LineNumber
$tmp = $logFile + '.tmp'
get-content $logFile | select -skip $newStartLine | out-file $tmp
powershell
Vic
fuente
fuente
-ReadCount
), pero si Sería yo quien engañaría y usaríaLogparser
para la tarea ( technet.microsoft.com/en-us/scriptcenter/dd919274.aspx , que técnicamente podría llamarse 'implementación de powershell' ya que expone la interfaz com para que pueda consultar desde PS connew-object -com
)Respuestas:
Aquí está la solución PowerShell usando Streams. Tarda ~ 60 segundos en procesar un archivo de 1GB en mi computadora portátil ( i3 2.5GHz, 4GB RAM, HDD 5400RPM) . Sin embargo, sigue siendo tres veces más lento que LogParser :
fuente