Public/Write-LogFile.ps1

<#
.SYNOPSIS
Writes messages to the active log file using different severity levels.

.DESCRIPTION
The Write-LogFile function provides an interface for logging messages.
It supports four distinct logging levels and automatically routes messages to the
appropriate logger method.

.PARAMETER TaskMessage
Specifies a standard informational message to log.

.PARAMETER TaskWarn
Specifies a warning message to log.

.PARAMETER TaskError
Specifies an error message to log.

.PARAMETER TaskFail
Specifies a critical failure message to log.

.INPUTS
System.String
You can pipe strings to any of the four message parameters using property names that
match the parameter names (TaskMessage, TaskWarn, TaskError, TaskFail).

.OUTPUTS
System.String
The function outputs a formatted string showing the log type and message that was logged.

.EXAMPLE
New-LogFile -Path "C:\Logs\app.log"

Write-LogFile -TaskMessage "Processing started"
Write-LogFile -TaskWarn "Memory usage is high"
Write-LogFile -TaskError "Failed to connect to service"
Write-LogFile -TaskFail "Application must shut down"

.EXAMPLE
$tasks = @(
    [PSCustomObject]@{TaskMessage = "Step 1 completed"},
    [PSCustomObject]@{TaskWarn = "Step 2 completed with warnings"},
    [PSCustomObject]@{TaskError = "Step 3 failed"}
)
$tasks | Write-LogFile

.EXAMPLE
$result = Write-LogFile -TaskMessage "User login successful"
$result # Outputs: "LOG: User login successful"

.EXAMPLE
try {
    Write-LogFile -TaskMessage "Test message"
}
catch {
    Write-Error "Logging failed: $_" # Throws if New-LogFile hasn't been called
}

.NOTES
Function Name : Write-LogFile
Requires : PowerShell 5.0 or later
Dependencies : FreeLogClass, New-LogFile function
Scope : Depends on script-scoped $logger variable
Module : FreeLog

Example Pipeline Integration:
    Get-Process | ForEach-Object {
        [PSCustomObject]@{
            TaskMessage = "Process $($_.Name) running with ID $($_.Id)"
        }
    } | Write-LogFile
#>

function Write-LogFile {
  [CmdletBinding()]
  param (
    [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)]
    [string]$TaskMessage,

    [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)]
    [string]$TaskWarn,

    [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)]
    [string]$TaskError,

    [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)]
    [string]$TaskFail
  )

  process {
    if ($null -eq $script:logger) {
      throw 'Logger not initialized. Run New-LogFile first.'
    }

    $message = $null
    $logType = $null

    if ($TaskFail) {
      $message = $TaskFail
      $logType = 'Fail'
      $script:logger.Fail($message)
    }
    elseif ($TaskError) {
      $message = $TaskError
      $logType = 'Error'
      $script:logger.Error($message)
    }
    elseif ($TaskWarn) {
      $message = $TaskWarn
      $logType = 'Warn'
      $script:logger.Warn($message)
    }
    elseif ($TaskMessage) {
      $message = $TaskMessage
      $logType = 'Log'
      $script:logger.Log($message)
    }
    else {
      throw 'No log data provided. You must specify TaskMessage, TaskWarn, TaskError, or TaskFail.'
    }

    "$($logType.ToUpper()): $message"
  }
}