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 appenders configured
    in the provided logger instance, provided the severity meets the logger's MinimumLevel.
  .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 LogEventType enum values
    (Debug, Information, Warning, Error, Fatal).
  .PARAMETER Exception
    [Optional] An Exception object associated with the log entry, typically used
    with Error or Fatal severity.
  .EXAMPLE
    $logger = New-Logger
    try {
      Write-LogEntry -Logger $logger -Message "Application starting." -Severity Information
      # ... code that might throw ...
      $riskyResult = Get-Something risky
      Write-LogEntry -Logger $logger -Message "Operation successful." -Severity Debug
    } catch {
      Write-LogEntry -Logger $logger -Message "An error occurred during operation." -Severity Error -Exception $_
    } finally {
      $logger.Dispose()
    }
  .LINK
    https://github.com/chadnpc/cliHelper.logger/blob/main/Public/Write-LogEntry.ps1
  #>

  [CmdletBinding()]
  param(
    [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
    [ValidateNotNull()]
    [Logger]$Logger,

    [Parameter(Mandatory = $true)]
    [Alias('msg')]
    [string]$Message,

    [Parameter(Mandatory = $false)]
    [Alias('l', 'level')]
    [LogEventType]$Severity = 1,

    [Parameter(Mandatory = $false)]
    [Alias('e')][AllowNull()]
    [System.Exception]$Exception # Optional Exception parameter
  )

  Process {
    #HACK: For now, rely on the logger's internal checks or catch potential NullReferenceExceptions if methods fail.
    try {
      switch ($Severity) {
        "Debug" { $Logger.Debug($Message); break }
        "Info" { $Logger.Info($Message); break }
        "Warning" { $Logger.Warning($Message); break }
        "Error" { $Logger.Error($Message, $Exception); break }
        "Fatal" { $Logger.Fatal($Message, $Exception); break }
        Default {
          throw [System.Exception]::new("Unhandled LogEventType: $Severity")
        }
      }
    } 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
          }
        )
      )
    }
  }
}