private/Use-LogMessage.ps1
function Use-LogMessage { [CmdletBinding()] [OutputType([int])] param() [int] $logsWritten = 0 foreach ($logMessage in $LoggingEventQueue.GetConsumingEnumerable()) { [string] $loggingFormat = $Logging.Format [int] $loggingSeverity = $Logging.LevelNo try { [boolean] $messageDiscarded = $true #Enumerating through a collection is intrinsically not a thread-safe procedure for ($targetEnum = $Logging.Targets.GetEnumerator(); $targetEnum.MoveNext(); ) { [hashtable] $targetConfiguration = $targetEnum.Current.Value [String] $loggingTarget = $targetEnum.Current.Key if ($logMessage.LevelNo -ge $targetConfiguration.LevelNo) { Invoke-Command -ScriptBlock $LogTargets[$loggingTarget].Logger -ArgumentList @($logMessage, $targetConfiguration) $messageDiscarded = $false $logsWritten++ } } if (!$messageDiscarded) { [System.Threading.Interlocked]::Increment($LoggingMessagerCount) } } catch { $lastColor = [Console]::ForegroundColor.value__ [Console]::ForegroundColor = [ConsoleColor]::Red [Console]::WriteLine($_) [Console]::ForegroundColor = $lastColor } } return $logsWritten } |