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
-ReadCount
), pero si Sería yo quien engañaría y usaría Logparser
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 con new-object -com
)