Logging Artikel

Eigene Loggingfunktion mit Rotation und LogLevel erweitern.

Wenn aus einer kleinen Loggingfunktion ein dauerhaft genutztes Betriebswerkzeug wird, reichen reine Logeintraege irgendwann nicht mehr. Dann werden LogLevel-Filter und Dateirotation wichtig.

Warum LogLevel?

Nicht jeder Lauf braucht dieselbe Detailtiefe. Im normalen Betrieb genuegen oft Info, Warning und Error. Fuer Fehlersuche willst du zusaetzlich vielleicht Debug oder Verbose erlauben.

Warum Rotation?

Ohne Rotation wachsen Logs still weiter. Gerade bei Detection-Loops, Scheduled Tasks oder haeufigen Deployments kann das schnell unhandlich werden.

PowerShell
function Rotate-LogFile {
    param(
        [string]$Path,
        [int]$MaxSizeMB = 5
    )

    if (Test-Path $Path) {
        $file = Get-Item $Path
        if ($file.Length -ge ($MaxSizeMB * 1MB)) {
            $stamp = Get-Date -Format 'yyyyMMdd-HHmmss'
            Move-Item -Path $Path -Destination ($Path + '.' + $stamp + '.bak') -Force
        }
    }
}
PowerShell
param(
    [ValidateSet('Info','Warning','Error','Debug')]
    [string]$MinimumLogLevel = 'Info'
)

$levelOrder = @{
    Info    = 1
    Warning = 2
    Error   = 3
    Debug   = 0
}

if ($levelOrder[$Type] -lt $levelOrder[$MinimumLogLevel]) {
    return
}

Sinnvolle Erweiterungen

  • Rotation nach Dateigroesse
  • Rotation nach Alter oder Anzahl Backups
  • zusaetzlicher LogLevel wie Debug
  • optionales Write-Host oder Write-Verbose

Worauf du achten solltest

  • Rotation vor dem Schreiben ausfuehren
  • Backupdateien klar benennen
  • LogLevel-Reihenfolge sauber definieren
  • Fehler beim Logschreiben nicht still verschlucken

Betriebliche Empfehlung

Im Standardbetrieb eher knappe Logs schreiben und bei Bedarf einen detailreicheren Modus aktivieren. So bleiben Logs lesbar und wachsen nicht unkontrolliert.

Gute Kombination

String-Sanitizing, strukturierter CMTrace-kompatibler Eintrag, LogLevel-Filter und Rotation ergeben zusammen eine robuste Loggingbasis fuer produktive Skripte.