functions/Out-DryClientLog.ps1

<#
 This module downloads a list of references to git repos, and ensures that those
 repos are present in a PSModulePath on the system.
 
 Copyright (C) 2021 Bjorn Henrik Formo (bjornhenrikformo@gmail.com)
 LICENSE: https://raw.githubusercontent.com/bjoernf73/dry.client/main/LICENSE
  
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
  
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
  
 You should have received a copy of the GNU General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#>


<#
.SYNOPSIS
Logs to file
 
.DESCRIPTION
Logs to file
 
.PARAMETER Type
Types follow Windows Streams, except for stream 1 (output) which isn't
used. You may also use first letter of a stream name, so type 2 and 'e'
are both the error stream, type 3 and 'w' the warning, and so on.
    Type 2 or 'e' = Error
    Type 3 or 'w' = Warning
    Type 4 or 'v' = Verbose
    Type 5 or 'd' = Debug
    Type 6 or 'i' = Information
 
.PARAMETER Message
The text to display and/or log.
 
#>

function Out-DryClientLog {
    [Alias("ocl")]
    param (
        [Alias("t")]
        [Parameter(Mandatory,Position=0)]
        [String]$Type,

        [Alias("m")]
        [Parameter(Mandatory,Position=1)]
        [AllowEmptyString()]
        [String]$Message
    )
    $LogFile = $GLOBAL:DryClientLog

    try {
        $Caller = (Get-PSCallStack)[1]
        [String] $Location = ($Caller.location).Replace(' line ','')

        switch ($Type) {
            {$_ -in ('2','e')} {
                $TextType = "ERROR: "
            }
            {$_ -in ('3','w')} {
                $TextType = "WARNING:"
            }
            {$_ -in ('5','d')} {
                $TextType = "DEBUG: "
            }
            {$_ -in ('6','i')} {
                $TextType = "INFO: "
            }
            default {
                $Type = 'v'
                $TextType = "VERBOSE:"
            }
        }      
        $LogMessage = "{0} `$$<{1}><{2} {3}><thread={4}>" -f ($TextType + $Message), "$Location", (Get-Date -Format "MM-dd-yyyy"), (Get-Date -Format "HH:mm:ss.ffffff"), $PID
        $LogMessage | Out-File -Append -Encoding UTF8 -FilePath ("filesystem::{0}" -f $LogFile) -Force  
    }
    catch {
        $PSCmdlet.ThrowTerminatingError($_)
    }
}