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
    )

    $consoleColor = switch ($Severity) {
        'DEBUG'   { 'Gray' }
        'INFO'    { 'White' }
        'WARNING' { 'Yellow' }
        'ERROR'   { 'Red' }
        default   { 'White' }
    }

    Write-Host "[$Severity] $Message" -ForegroundColor $consoleColor

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