Private/Get-Log.ps1

function Get-Log {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, Position = 0)]
        [string]$Path,
        [string]$LogLevel,
        [string]$LogView,
        [string]$Order,
        [int]$Entries
    )

    process {

        $logColorHash = @{
            #'INFO' = 'Green';
            'ERROR' = 'Red';
            'WARN'  = 'Yellow'
        }

        # Replace backslash with double backslash to conform with accepted JSON format
        $log = Get-Content -Path $javinizerLogPath | ForEach-Object { $_ -replace '\\', '\\' } | ConvertFrom-Json

        if ($LogView -eq 'Object') {
            Write-Output $log
        }

        else {
            # Set object filter to the desired loglevel
            if ($PSBoundParameters.ContainsKey('LogLevel')) {
                if ($Order -eq 'Asc') {
                    $log = $log | Where-Object { $_.level -eq "$LogLevel" } | Select-Object -First $Entries
                } else {
                    $log = $log | Where-Object { $_.level -eq "$LogLevel" } | Sort-Object timestamp -Descending | Select-Object -First $Entries
                }
            } else {
                if ($Order -eq 'Asc') {
                    $log = $log | Sort-Object timestamp | Select-Object -First $Entries
                } else {
                    $log = $log | Sort-Object timestamp -Descending | Select-Object -First $Entries
                }
            }

            if ($LogView -eq 'Table') {
                $log | Format-Table -AutoSize | Format-Color $logColorHash
            } elseif ($LogView -eq 'Grid') {
                $log | Out-GridView
            } else {
                $log | Format-Color $logColorHash
            }
        }
    }
}