Public/Write-LogEntry.ps1
function Write-LogEntry { <# .SYNOPSIS Writes a log message of a specified logger instance. .DESCRIPTION Logs a message with a given severity level to all configured logappenders. .PARAMETER Logger The logger instance (created via New-Logger or directly) to use for logging. .PARAMETER Message The main text of the log message. .PARAMETER Severity The severity level of the message. Must be one of the LogLevel enum values (Debug, Info, Warn, Error, Fatal). .PARAMETER Exception [Optional] An Exception object associated with the log entry, typically used with Error or Fatal severity. .NOTES Will only work when the severity meets the logger's MinLevel. .EXAMPLE $logger = New-Logger try { Write-LogEntry -l $logger -Message "Application starting." -level Information # ... code that might throw ... $riskyResult = Get-Something risky Write-LogEntry -l $logger -Message "Operation successful." -level Debug } catch { Write-LogEntry -l $logger -Message "An error occurred during operation." -level Error -Exception $_ } finally { $logger.Dispose() } .LINK https://github.com/chadnpc/cliHelper.logger/blob/main/Public/Write-LogEntry.ps1 #> [CmdletBinding(DefaultParameterSetName = 'm')] [Alias('Register-LogEntry')] param( [Parameter(Mandatory = $false, ValueFromPipeline = $true)] [Alias('lo')][ValidateNotNull()] [Logger]$Logger = [Logger]::Default, [Parameter(Mandatory = $true, ParameterSetName = 'e')] [Alias('le', 'entry')][ValidateNotNull()] [LogEntry]$LogEntry, [Parameter(Mandatory = $true, ParameterSetName = 'm')] [Alias('m', 'msg')] [string]$Message, [Parameter(Mandatory = $false, ParameterSetName = 'm')] [Alias('s', 'l', 'level')] [LogLevel]$Severity = 1, [Parameter(Mandatory = $false, ParameterSetName = 'm')] [Alias('e')][AllowNull()] [Exception]$Exception # Optional Exception parameter ) Process { try { if ($PSCmdlet.ParameterSetName -eq "m") { #HACK: For now, rely on the logger's internal checks or catch potential NullReferenceExceptions if methods fail. switch ($Severity) { "DEBUG" { $Logger.LogDebugLine($Message); break } "INFO" { $Logger.LogInfoLine($Message); break } "WARN" { $Logger.LogWarnLine($Message); break } "ERROR" { $Logger.LogErrorLine($Message, $Exception); break } "FATAL" { $Logger.LogFatalLine($Message, $Exception); break } Default { throw [System.Exception]::new("Unhandled LogLevel: $Severity") } } } else { $logger.Log($LogEntry) } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new( $_.Exception, "FAILED_TO_WRITE_LOG_ENTRY", [System.Management.Automation.ErrorCategory]::InvalidOperation, @{ Hint = "Ensure the logger is not disposed" Timestamp = [datetime]::UtcNow } ) ) } } } |