Skip to content

Instantly share code, notes, and snippets.

@zoomix
Last active November 21, 2017 08:44
Show Gist options
  • Save zoomix/af40563ceb80851716562b2b043c9445 to your computer and use it in GitHub Desktop.
Save zoomix/af40563ceb80851716562b2b043c9445 to your computer and use it in GitHub Desktop.
Logrotering, komprimering och borttagning
##
# Vad är detta
#
# Fast2 logroteringsscript. Kräver 7-zip. Konfigurera sökvägen till 7zips katalog här under.
$7zip_folder = "C:\Program Files\7-Zip\"
#
#
##
# Hur använder man:
# Lägg metodanropen längst ner i den här filen.
#
#
# Rotate-Log Usage: Rotate-Log <katalog med loggar>
# roterar loggar dagligen. Den letar upp alla som heter nåt på .log och roterar de till dagens datum, om inte en sådan fil redan existerar
#
# Compress-Log Usage: Compress-Log <katalog med loggar> <antal_dagar>
# komprimerar alla filer i en mapp som övertstiger ett visst antal dagar (man räknas antal dagar sedan seaste skrivning till file). Filerna
# läggs i samma katalog men heter .zip. Källfilen tas bort.
#
# Delete-Log Usage: Delete-Log <katalog med loggar> <antal_dagar>
# tar bort alla filera i en mapp som övertstiger ett visst antal dagar (man räknas antal dagar sedan seaste skrivning till file).
#
# RotateCompressDelete-Log Usage: RotateCompressDelete-Log <katalog med loggar> <antal_dagar_komprimerat> <antal_dagar_deletea>
# All together now - hittar alla loggar, roterar, tar bort de som skall tas bort, komprimerar de som ska komprimeras.
# Använd detta om du inte absolut måste använda något annat.
$today = Get-Date
Function Rotate-Log([string]$log_dir) {
if (Test-Path($log_dir)) {
# Hämta alla filer som slutar på log eller txt
# Exkludera alla filer som har 201 och 202 i namnet eftersom de antagligen redan är datumhanterade (datumhanterade loggar tenderar att inkludera året, typ 2015, 2016, 2017, 2021, 2022 etc)
$logs = Get-ChildItem $log_dir -include *.log*,*.txt* -exclude *201*,*202*,*.zip,*.7z -Name
foreach ($log_path in $logs) {
$log = $log_dir + "\" + $log_path
$old = $log + "." + $today.ToString("yyyyMMdd")
$item = Get-Item $log
if (Test-Path($old)) {
Write-Host "Roterar inte $log för att $old redan finns"
} elseif ($item.Length -ne 0) {
Write-Host "Roterar $log till $old"
Copy-Item $log $old -Force
Write-Host "Nollställer $log (emulerar copytruncate)"
$null | Out-File $log -Encoding default -Force
} else {
Write-Host "Roterar inte $log för att den är 0kb stor"
}
}
}
}
Function Compress-Log([string]$log_dir, [int]$compress_days) {
if (Test-Path($log_dir)) {
$logs = Get-ChildItem $log_dir -exclude *.zip,*.7z
foreach ($log in $logs) {
$zipfilename = $log.FullName + ".zip"
if ($log.PSIsContainer) {
Write-Host "$log var en mapp. Hoppar över."
} elseif ($log.lastWriteTime -lt $today.AddDays(-$compress_days)) {
Write-Host "Komprimerar $log till $zipfilename och tar bort"
$OriginalDir = Get-Location #Måste krångla för att man inte kan skriva hel sökväg om det finns space i dem.
Set-Location $7zip_folder
.\7z.exe A -tzip $zipfilename $log.FullName | Out-Null
# Behåller datum för att inte förstöra sortering
$zipfile = Get-Item $zipfilename
$zipfile.LastWriteTime = ($log.LastWriteTime)
Set-Location $OriginalDir
Remove-Item $log.FullName
}
}
}
}
Function Delete-Log([string]$log_dir, [int]$saving_days) {
if (Test-Path($log_dir)) {
$logs = Get-ChildItem $log_dir
foreach ($log in $logs) {
if ($log.PSIsContainer) {
Write-Host "$log var en mapp. Hoppar över."
} elseif ($log.lastWriteTime -lt $today.AddDays(-$saving_days)) {
Write-Host "Tar bort $log. Senast ändrad " $log.lastWriteTime
Remove-Item $log.FullName -Force
}
}
}
}
Function RotateCompressDelete-Log([string]$log_dir, [int]$compress_days, [int]$delete_days ) {
Rotate-Log $log_dir
Delete-Log $log_dir $delete_days
Compress-Log $log_dir $compress_days
}
RotateCompressDelete-Log "D:\wamp\logs" 30 365
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment