Private/Write-BridgeLog.ps1
function Write-BridgeLog { [CmdletBinding()] <# .SYNOPSIS Καταγράφει μηνύματα λειτουργίας του συστήματος. .DESCRIPTION Η Write-BridgeLog γράφει μηνύματα με κατάλληλη κατηγοριοποίηση (Verbose, Debug, Warning) και αποθηκεύει σε ημερήσια αρχεία καταγραφής. .PARAMETER Stage Το στάδιο λειτουργίας (Ανάλυση, Απόφαση, Ειδοποίηση, Σφάλμα). .PARAMETER Message Το μήνυμα που θα καταγραφεί. .PARAMETER Level Το επίπεδο λογιστικού μηνύματος (Verbose, Debug, Warning). .OUTPUTS None. .EXAMPLE Write-BridgeLog -Stage 'Ανάλυση' -Message 'Έλεγχος OCR...' -Level 'Verbose' .NOTES Δημιουργεί log directory αν δεν υπάρχει και καταγράφει ημερήσια αρχεία. #> param ( [Parameter(Mandatory)][ValidateSet('Ανάλυση', 'Απόφαση', 'Ειδοποίηση', 'Σφάλμα')] [string]$Stage, [Parameter(Mandatory)][string]$Message, [Parameter()][ValidateSet('Verbose', 'Debug', 'Warning')] [string]$Level = 'Verbose' ) $prefix = "[Bridge:$Stage]" $output = "$prefix $Message" # Console logging switch ($Level) { 'Verbose' { Write-Verbose $output } 'Debug' { Write-Debug $output } 'Warning' { Write-Warning $output } } # File logging - two levels up $splitPathSplat = @{ Path = (Split-Path -Path $PSScriptRoot -Parent) Parent = $true } $basePath = Split-Path @splitPathSplat $joinPathSplat = @{ Path = $basePath ChildPath = 'logs' } $logDir = Join-Path @joinPathSplat if (-not (Test-Path $logDir)) { $newItemSplat = @{ Path = $logDir ItemType = 'Directory' Force = $true } New-Item @newItemSplat | Out-Null } $dateStr = (Get-Date).ToString('yyyy-MM-dd') $timeStr = (Get-Date).ToString('HH:mm:ss') $joinPathSplat = @{ Path = $logDir ChildPath = "BridgeWatcher-$dateStr.log" } $logPath = Join-Path @joinPathSplat $logLine = "[$timeStr] [$Stage] $Message" $addContentSplat = @{ Path = $logPath Value = $logLine } Add-Content @addContentSplat } |