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)
    }
}