Private/Write-CustomLog.ps1
|
function Write-CustomLog { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Message, [Parameter(Mandatory = $false)] [ValidateSet('DEBUG', 'INFO', 'WARNING', 'ERROR')] [string]$Severity = 'INFO', [Parameter(Mandatory = $false)] [switch]$NoCache, [Parameter(Mandatory = $false)] [string]$ConsoleMessage ) $severityOrder = @{ DEBUG = 0; INFO = 1; WARNING = 2; ERROR = 3 } $configuredLevel = $script:CONSOLE_LOG_LEVEL if ([string]::IsNullOrWhiteSpace($configuredLevel) -or -not $severityOrder.ContainsKey($configuredLevel)) { $configuredLevel = 'INFO' } $messageForConsole = if ($PSBoundParameters.ContainsKey('ConsoleMessage')) { $ConsoleMessage } else { $Message } if ($severityOrder[$Severity] -ge $severityOrder[$configuredLevel]) { Write-Information "[$Severity] $messageForConsole" -InformationAction Continue } try { Write-Log -Level $Severity -Message $Message } catch { Write-Verbose "Failed to write to log file: $($_.Exception.Message)" } if (-not $NoCache) { $logEntry = @{ timestamp = [DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds() level = $Severity.ToUpper() message = $Message } [void]$script:IN_MEMORY_LOGS.Add($logEntry) } } |