Last active
November 21, 2017 08:44
-
-
Save zoomix/af40563ceb80851716562b2b043c9445 to your computer and use it in GitHub Desktop.
Logrotering, komprimering och borttagning
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## | |
# 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